eddy_em: (Default)
eddy_em ([personal profile] eddy_em) wrote2017-11-01 11:15 pm

Цитата из наболевшего

вернуть NULL, если памяти не хватает. Что сделали в ядре? Правильно, сказали нехер и стали всегда возвращать указатель на память, даже если ее нет.
Если ты хочешь 100% получить память - ты можешь её получить mmap + map_populate. Я выше уже отвечал эдику. Тогда ты 100% получишь память, либо ошибку, если памяти не хватает.
Забавно, что под все остальные системы я просто могу использовать стандартный и простой в использовании malloc из libc, а для линукса нужно пердолиться для того, чтобы получить память.

(ЛОР)

Действительно, механизм выделения памяти в линуксе уж очень черезжопный.
Добавил в свои сниппеты:
#include <stdio.h>
#include <unistd.h>

static unsigned long long get_available_mem(){
    return sysconf(_SC_AVPHYS_PAGES) * (unsigned long long) sysconf(_SC_PAGE_SIZE);
}

int main(){
    unsigned long long m = get_available_mem();
    printf("MEM: %llu == %lluGB\n", m, m/1024/1024/1024);
    return 0;
}

// Never allocate memory by big pieces with malloc! Only mmap with MAP_POPULATE!!!!!!!!!11111111111

Post a comment in response:

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org