При отладке на Windows XP 32-бит, используя иммунитет отладчик, я вижу следующие в стеке:Биты в адрес памяти
_Address_ -Value_
00ff2254 ff090045
00ff2258 00000002
Я понимаю, что каждый адрес местоположения содержит 8 бит.
Это правильно?
При отладке на Windows XP 32-бит, используя иммунитет отладчик, я вижу следующие в стеке:Биты в адрес памяти
_Address_ -Value_
00ff2254 ff090045
00ff2258 00000002
Я понимаю, что каждый адрес местоположения содержит 8 бит.
Это правильно?
Если я правильно понимаю ваш вопрос, ответ да, каждое отдельное место памяти содержит 8 бит.
Отладчик показывает вам 4 байта (32 бита) за раз, чтобы сделать дисплей более компактным (и потому, что многие типы данных занимают 32 бита, поэтому часто бывает полезно видеть 32-битные значения). Вот почему адреса в левом столбце разделены на четыре места.
Если отладчик показал один байт (8 бит), в то время, дисплей будет выглядеть следующим образом:
_Address_ -Value_
00ff2254 45
00ff2255 00
00ff2256 09
00ff2257 ff
00ff2258 02
00ff2259 00
00ff225a 00
00ff225b 00
(при условии, что вы на «little-endian» машины, большинство современных настольных ПК .)
Место памяти относится к местоположению памяти, и каждая последующая ячейка памяти относится к следующему байту в памяти. Таким образом, вы можете обращаться к памяти только на одной байтовой границе, и каждый должен знать, что байт имеет ширину 8 бит.
Я думаю, что главная проблема с вашим вопросом заключается в том, что вы просите об одном, но я обнаруживаю, что в тенях возникает другой вопрос.
Прежде всего адресные объекты в памяти компьютера организованы в виде байтов, каждый из которых содержит по 8 бит, поэтому да, каждый адрес может считаться ссылкой на 8 бит или байт.
Однако вы можете легко группировать больше байтов для формирования более крупных и сложных структур данных.
Если ваш вопрос действительно «Почему я вижу 8-значное значение в качестве содержимого по адресу в моем дампе стека», то причиной этого является то, что он сбрасывает 32-битные (4 байта) значения.
Другими словами, вы можете взять адрес, адрес + 1, адрес + 2 и адрес + 3, захватить байты из каждого из них и объединить с 32-битным значением.
Это действительно ваш вопрос?
Чтобы выполнить ответ RH, вы можете быть удивлены тем, что у вас столько номеров для заданного адреса.
Вы должны рассмотреть
Address Byte (8 bits)
00ff2254 45
00ff2255 00
00ff2256 09
00ff2257 ff
00ff2258 02
...
(на архитектуре процессора, используемой XP)
Могу ли я продолжить мой вопрос? Почему каждый адрес содержит 8 бит. Это из-за архитектуры микросхемы памяти? Или это из-за 32-битного процессора. Является ли это 8 бит истинным для другой ОС, такой как FreeBSD, Mac, Linux? – cperdana
8 бит или байт - это общий и удобный блок данных на компьютерах (http://en.wikipedia.org/wiki/Byte). Удобно, потому что, как сила 2 (2^3 бит), она достаточно мала, чтобы хранить все римские символы.8 бит - это минимальное количество данных, которое вы можете получить из памяти. Компьютеры с шиной памяти 32 бит позволяют извлекать 32 бита за одну операцию - это быстрее, но минимальный блок данных по-прежнему составляет 8 бит. –
Обратите внимание, что люди, как правило, может только отвечать на вопросы, которые вы на самом деле спросить. –