Как заставить Linux выделить память в высоком (64-битном) адресном пространстве - PullRequest
0 голосов
/ 04 мая 2011

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 04 мая 2011

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

0 голосов
/ 06 мая 2011

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

...