2010-09-29 7 views
0

При отладке на Windows XP 32-бит, используя иммунитет отладчик, я вижу следующие в стеке:Биты в адрес памяти

_Address_ -Value_ 
00ff2254 ff090045 
00ff2258 00000002 

Я понимаю, что каждый адрес местоположения содержит 8 бит.

Это правильно?

+0

Обратите внимание, что люди, как правило, может только отвечать на вопросы, которые вы на самом деле спросить. –

ответ

3

Если я правильно понимаю ваш вопрос, ответ да, каждое отдельное место памяти содержит 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» машины, большинство современных настольных ПК .)

0

Место памяти относится к местоположению памяти, и каждая последующая ячейка памяти относится к следующему байту в памяти. Таким образом, вы можете обращаться к памяти только на одной байтовой границе, и каждый должен знать, что байт имеет ширину 8 бит.

2

Я думаю, что главная проблема с вашим вопросом заключается в том, что вы просите об одном, но я обнаруживаю, что в тенях возникает другой вопрос.

Прежде всего адресные объекты в памяти компьютера организованы в виде байтов, каждый из которых содержит по 8 бит, поэтому да, каждый адрес может считаться ссылкой на 8 бит или байт.

Однако вы можете легко группировать больше байтов для формирования более крупных и сложных структур данных.

Если ваш вопрос действительно «Почему я вижу 8-значное значение в качестве содержимого по адресу в моем дампе стека», то причиной этого является то, что он сбрасывает 32-битные (4 байта) значения.

Другими словами, вы можете взять адрес, адрес + 1, адрес + 2 и адрес + 3, захватить байты из каждого из них и объединить с 32-битным значением.

Это действительно ваш вопрос?

0

Чтобы выполнить ответ RH, вы можете быть удивлены тем, что у вас столько номеров для заданного адреса.

Вы должны рассмотреть

Address Byte (8 bits) 
00ff2254 45 
00ff2255 00 
00ff2256 09 
00ff2257 ff 
00ff2258 02 
... 

(на архитектуре процессора, используемой XP)

+0

Могу ли я продолжить мой вопрос? Почему каждый адрес содержит 8 бит. Это из-за архитектуры микросхемы памяти? Или это из-за 32-битного процессора. Является ли это 8 бит истинным для другой ОС, такой как FreeBSD, Mac, Linux? – cperdana

+0

8 бит или байт - это общий и удобный блок данных на компьютерах (http://en.wikipedia.org/wiki/Byte). Удобно, потому что, как сила 2 (2^3 бит), она достаточно мала, чтобы хранить все римские символы.8 бит - это минимальное количество данных, которое вы можете получить из памяти. Компьютеры с шиной памяти 32 бит позволяют извлекать 32 бита за одну операцию - это быстрее, но минимальный блок данных по-прежнему составляет 8 бит. –

Смежные вопросы