Прежде всего, я заметил, что, когда память malloc и calloc, размер памяти отличается. Я работаю с наборами данных из нескольких ГБ. Это нормально для данных случайных.Вопросы памяти Malloc
Я ожидал, что смогу просто скомпилировать большой объем памяти и прочитать любые случайные данные, которые были в нем применены к поплавку. Однако, глядя на объем памяти в просмотре процесса, память явно не заявляется (по сравнению с calloc, где я вижу большой отпечаток стопы). Я запустил цикл, чтобы записать данные в память, а затем увидел, как поднимается память. Правильно ли я говорю, что память фактически не заявлена до тех пор, пока я ее не инициализирую?
Наконец, после того, как я прошел 1024 * 1024 * 128 байтов (1024 МБ в средстве просмотра), я начал получать segfaults. Похоже, что Calloc инициализирует всю сумму до 1 ГБ. Почему я получаю segfaults при инициализации памяти в цикле for с помощью malloc с этим номером 128 МБ и почему размер памяти 1024 МБ?
Если malloc большой объем памяти, а затем прочитайте от него, что я получаю (поскольку просмотрщик процесса почти не имеет следа, пока я его не инициализирую)?
В конце концов, есть ли способ для размещения более 4 ГБ? Я тестирую производительность иерархии памяти.
Код для # 2:
long long int i;
long long int *test=(long long int*)malloc(1024*1024*1024);
for (i=0;i<1024*1024*128;i++)
test[i]=i;
sleep(15);
32-разрядная или 64-разрядная Linux? – 2010-12-08 00:22:59
Linux использует «оптимистичную стратегию распределения памяти».Некоторая информация: http://linux.die.net/man/3/malloc – sje397 2010-12-08 00:24:07