LINUX.ORG.RU

Memory Manager Error?


0

0

В некоторых случаях при динамической аллокации памяти malloc выдает 0.
Расследование показало, что это происходит сразу после аллокации памяти вблизи
границы 128M виртуального адресного пространства.
Мне удалось написать программу из 2ух строк, где это наблюдается:

#include <fcntl.h>
#include <sys/mman.h>
// здесь используется мапирование файла ttt в память, но это не критично,
// критичным является hint адреса 0x804A000
printf("%d\n", mmap((void*)(0x804A000),1000,0,MAP_SHARED,open("tt",O_RDWR),0));
printf("%d\n", malloc(10000)); // malloc здесь возвращает 0, а должен бы память...

Есть ли у кого-нибудь соображения на этот счет?

У меня 2 Linux-машины (железо почти одинаковое, Celeron на Asus KN97, RAM 64M и 192M)
1. RH BC Linux 6.2 + gcc 2.95.2
2. RH BC Linux 6.0? + gcc 2.91.66

Работает ли это на других конфигурациях Linux?

Заранее спасибо,
Вадим

anonymous

когда-то 128 был верхним пределом свопа на одном логическом диске. Может быть дело в этом.

sacha
()

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

maxp
()

разумеется в мане сказано не про мое ядро, ну я думаю и так понятно :)

maxp
()
Ответ на: комментарий от sacha

Please, re-test.

Не мапируется файл tt, скорее всего его просто нет в текущей дир.
Надо его создать (размер не важен, но лучше >= 4K)

поскольку mmap не отработал, то malloc работает корректно.

первое число д.б. адресом 0x804A000 (в dec)

anonymous
()

Slackware 7.1 2.2.17 134520832 0

saper ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.