LINUX.ORG.RU

Как выделить много памяти?

 ,


0

2

В Windows есть разница между памятью, выделенной в хипе (HeapAlloc) , в плане нельзя там выделить скажем 100 мегабайт (хип процесса имеет меньше, можно конечно свой создать, но это такое). И виртуальной памятью (virtualloc) где можно выделить сколько угодно (в пределах ограничений ОС, ес-но). А как в линукс? Можно ли выделить много памяти (скажем, блок на 100мб ) через malloc? Или надо иначе, через brk / mmap?

Нужен фикс. блок большого размера, который будет жить все время работы программы

malloc выделит любой запрошенный объём, лишь бы хватило адресного пространства процесса. mmap то сисколл, его malloc иногда использует внутри себя для разных целей.

firkax ★★★★★
()

Можно ли выделить много памяти (скажем, блок на 100мб ) через malloc?

100мб – это немного. Если ты никаких странных манипуляций не планируешь, то дёргай malloc() и не парься. Если планируешь, например, делать ползучее выделение/освобождение с сохранением выделенного блока, как это делают некоторые GC, придётся с mmap() запариться.

hateyoufeel ★★★★★
()

нельзя там выделить скажем 100 мегабайт

С чего бы это? Вот я спокойно выделил 50GB через HeapAlloc() из дефолтного хипа:

    HANDLE hHeap = GetProcessHeap();
    LPVOID buf = HeapAlloc(hHeap, 0, (SIZE_T) 50 * 1024 * 1024 * 1024);

    if (buf == NULL) {
        std::cout << "Error allocating from heap\n";
    }
bigbit ★★★★★
()
Последнее исправление: bigbit (всего исправлений: 2)

Аналог VirtualAlloc в linux будет mmap. Ограничение те-же: размер выделяемого блока кратен размеру страницы. Выделение памяти через эти функции выгодно тем, что при освобождении память сразу доступна для других программ. Недостаток - это всегда системный вызов, может быть медленнее malloc\new для небольших блоков.

m0xf
()