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

#linux #memory-management #64-bit

#linux #управление памятью #64-разрядный

Вопрос:

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

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

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

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

Комментарии:

1. Вы пробовали valgrinding сначала решить проблему?

Ответ №1:

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

Ответ №2:

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