как заставить Linux выделять память в высоком (64-битном) адресном пространстве

Я пытаюсь отследить проблему segfault в старом коде C (не написанном мной). Сегментарные ошибки возникают только в том случае, если адреса определенных переменных в этом коде превышают ограничение на 32-битное целое число. (Так что у меня есть довольно хорошее представление о том, что происходит не так, но я не знаю, где.)

Итак, мой вопрос: есть ли способ заставить Linux выделять память для процесса в верхнем адресном пространстве? На данный момент вероятность возникновения segfault в значительной степени зависит от случая, что немного затрудняет отладку.

Я использую Ubuntu 10.04, Kernel 2.6.31-23-generic на ноутбуке Dell inspiron 1525 с 2 ГБ оперативной памяти, если это поможет.

Заранее спасибо, Мартин.


person Martin    schedule 04.05.2011    source источник
comment
Пробовали ли вы сначала valgrind решить проблему?   -  person Marc Mutz - mmutz    schedule 05.05.2011


Ответы (2)


Вы можете выделить анонимный блок памяти с помощью системного вызова mmap(), который вы можете передать в качестве аргумента там, где вы хотите, чтобы он отображался.

person yan    schedule 04.05.2011

Я бы включил параметры предупреждений -Wpointer-to-int-cast и -Wint-to-pointer-cast и проверил все предупреждения, которые они выдают (я полагаю, что они включены в -Wall для 64-разрядных целей). Причина, скорее всего, связана с этим, и простой аудит предупреждений, которые выдает компилятор, может быть лучшим подходом, чем использование отладчика.

person R.. GitHub STOP HELPING ICE    schedule 06.05.2011