Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: MartinОтветов: 2

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

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

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

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

  • Пробовали ли вы сначала valgrind решить проблему? Marc Mutz - mmutz 05.05.2011

linuxmemory-management64-bit

Ответы

Ответ 1 · рейтинг 2 · yan

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

Ответ 2 · R.. GitHub STOP HELPING ICE

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы