Nov. 1st, 2017

eddy_em: (Default)
Доколе мы на этих несчастных 64-битных процессорах мучиться будем?
Когда же уже будут 128-, а еще лучше — 256-битные? И как минимум с аппаратной поддержкой 512-битных megafloat и megalong.
eddy_em: (Default)
вернуть 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

May 2025

S M T W T F S
    123
45678910
11121314151617
1819202122 2324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 23rd, 2025 11:44 am
Powered by Dreamwidth Studios