Это адрес памяти? - PullRequest
3 голосов
/ 28 июня 2011

Я изучаю GDB, и я получил свою первую ошибку. Это была ошибка:

0x00007fff83074096 in __kill ()

Адрес:

0x00007fff83074096

... адрес памяти в шестнадцатеричном формате? Я преобразовал это в десятичную, из интереса, и число огромно. Я не могу поверить, что существует так много адресов памяти.

Ответы [ 4 ]

5 голосов
/ 28 июня 2011

Да.Это.

Это адрес в виртуальной памяти 64-битного процесса.

Не все адреса используются (это адрес, это только метка).

Подробнее об адресе можно узнать, выполнив

:break 0x00007fff83074096
:list 0x00007fff83074096
:disassemble 0x00007fff83074096

Просмотреть весь стек bactkrace

 :bt full

Во всех потоках

 :thread apply all bt full
5 голосов
/ 28 июня 2011

Если вы работаете на 64-битной платформе, то да, такие большие адреса существуют.(См. Также: http://en.wikipedia.org/wiki/Virtual_address.)

Конечно, возможно, что у вас просто есть переполнение буфера где-то, что повредило ваш стек, и перезаписал адрес бессмысленным.

3 голосов
/ 28 июня 2011

Да, это адрес памяти. Из-за подкачки доступно гораздо больше адресов памяти, чем фактической памяти для назад виртуального адресного пространства.

Может показаться, что работает pmap -x 1 или pmap -x $$ поучительно, наряду с просмотром /proc/pid/maps содержимого для различных процессов. (cat /proc/self/maps легко запустить.)

2 голосов
/ 28 июня 2011

16 шестнадцатеричных цифр x 4 (биты представлены одной шестнадцатеричной цифрой) = 64 бита.Вы используете 64-битную платформу, почему вы удивлены?

...