очень большое выделение памяти в 64-битном Linux

Я пытаюсь выделить один очень большой кусок памяти (> 2,5 ГБ) в 64-битном Linux Centos. Аппаратное обеспечение имеет более 16 ГБ физической памяти. Однако, когда я использую malloc или calloc, они возвращают null. Код работает под учетной записью root, и, насколько я проверял с помощью ulimit, ограничений на выделение памяти нет. В чем может быть проблема?

Спасибо.

Мете


person mete    schedule 19.12.2010    source источник
comment
У вас 64-битная программа, верно?   -  person Ignacio Vazquez-Abrams    schedule 19.12.2010
comment
какой самый большой кусок памяти вы можете выделить?   -  person dan_waterworth    schedule 19.12.2010
comment
Наверное. Я компилирую с помощью icc (компилятор Intel C) и использую переменные среды Intel64. Я предполагаю, что он компилируется в 64-битную версию, как я могу это проверить?   -  person mete    schedule 19.12.2010
comment
Запустите file для исполняемого файла.   -  person Ignacio Vazquez-Abrams    schedule 19.12.2010
comment
Я пробовал и 10Гб и 2,5Гб, и оба терпят неудачу.   -  person mete    schedule 19.12.2010
comment
файл отображает следующее: изменить порядок: исполняемый файл ELF 64-bit LSB, AMD x86-64, версия 1 (SYSV), для GNU/Linux 2.6.9, динамически связанный (использует общие библиотеки), для GNU/Linux 2.6.9, не раздетый   -  person mete    schedule 19.12.2010
comment
Вы пытались установить кучу в ld? -Wl,--heap,2147483648   -  person Novikov    schedule 19.12.2010
comment
Пожалуйста, также опубликуйте полный исходный код.   -  person Martin v. Löwis    schedule 19.12.2010
comment
Я не получил аргумент --heap. Это аргумент icc?   -  person mete    schedule 20.12.2010
comment
исходный код очень прост, просто пытаюсь заполнить огромную матрицу размером не менее 2,5 ГБ.   -  person mete    schedule 20.12.2010
comment
Если несложно, то напишите. В нем может быть ошибка, которую вы не можете распознать.   -  person Martin v. Löwis    schedule 20.12.2010
comment
хорошо, кажется, я пытаюсь зарезервировать больше где-то еще, и у меня остается менее 2,5 ГБ. Приносим извинения за неудобства.   -  person mete    schedule 20.12.2010


Ответы (1)


Погуглите процедуру sbrk, она вам поможет.

person Marie    schedule 19.12.2010
comment
Я сделал, но разве malloc не делает все необходимое? Должен ли я сам подумать о том, чтобы позвонить в sbrk? - person mete; 20.12.2010
comment
Нет, malloc должен быть в порядке. В общем, как видите, все люди думают, что это должно работать так, как вы описали. Учитывая, что это не работает, должно быть что-то, о чем вы нам не сказали (например, ошибка в коде). - person Martin v. Löwis; 20.12.2010