Por que um endereço de memória contém apenas 16 bytes de dados?

0
0x8048384 <main+16>: 0x00fc45c7     0x83000000     0x7e09fc7d     0xc713eb02
0x8048394 <main+32>: 0x84842404     0x01e80804     0x8dffffff     0x00fffc45

Então, cada endereço de memória contém 16 bytes de dados? 4x4 = 16. Então, 4 bytes é = 0x00fc45c7

Estou certo?

Alkerak
fonte
2
Não tenho certeza se sigo sua pergunta. Você o lê como 'Um endereço de memória contém um byte de dados. Por definição. E, no caso de PCs, esse byte tem 8 bits de largura). 0x00fc45c7 é um conjunto de quatro bytes (0x00, 0xFC, 0x45 e 0xC7) gravados em um formato mais curto. Ou você está vendo quatro conjuntos de 4 bytes por linha.
Hennes
Hmm ... então tem 8 bytes de largura. Eu pensei que era 4 bytes de largura. Porque você tem incrementos principais de 16 para 16. Tem certeza?
Alkerak
4 conjuntos de 4 bytes são 16 bytes (ou 0x10 bytes em hexadecimal). 0x80483 <b> 8 </b> 4 mais dezesseis (0x10) é 0x80483 <b> 9 </b> 4
Hennes
ok, acho que entendi. Então 0x00fc45c7 é de 4 bytes. E eu tenho 16 bytes no total por linha. Mas este não é um endereço de memória? 0x8048384. Portanto, neste endereço de memória são armazenados 16 bytes de dados ou 0x00fc45c7 0x83000000 0x7e09fc7d 0xc713eb02
Alkerak
Depende de como você olha para um endereço de memória. Uma maneira é olhar para um endereço é um único byte. Outra maneira seria analisá-lo com a largura do banco de dados (nesse caso, um único endereço é um conjunto de quatro bytes seqüenciais. Tudo o que pode ser lido simultaneamente e começa com um deslocamento no módulo 4).
Hennes

Respostas:

5

Não faz. Um endereço específico na memória geralmente aponta para um byte de memória. No entanto, sua exibição aqui mostra todos os bytes de memória de 0x8048384até 0x80483A4- São 32 bytes de memória, organizados em 2 linhas de 4 valores de 4 bytes.

Se você olhar com cuidado no lado esquerdo, os endereços não aumentam em um entre as linhas, mas em 16: 84-> 94(na base 16), que informa que há 16 bytes de memória sendo exibidos em cada linha. Isso geralmente é mais conveniente do que 1 byte por linha, e essas linhas de 16 bytes são divididas em grupos de 4 bytes, porque é bastante comum o uso de números alinhados de 32 bits, que cada grupo de 4 bytes representa. Isso facilita o processamento visual das informações sem recorrer a outras ferramentas de interpretação.

Darth Android
fonte
2
Eu acho que entendi. Portanto, 0x00fc45c7 repousa em 0x8048384 e 0x83000000 repousa em (0x8048384 + 4) e assim por diante. Estou correcto?
Alkerak
Sim esta correto.
Hand-E-Food
1
Adendo: depuradores, utilitários de despejo de disco e ferramentas similares geralmente usam o tipo de exibição mostrado. A saída PODE ser mostrada como um endereço de quatro bytes (oito dígitos hexadecimais) seguido por um único byte, depois outro endereço de quatro bytes (um maior que o anterior) seguido de outro byte, etc. Mas isso exigiria muito espaço no visor. A exibição em cada linha de 16 bytes de conteúdo, juntamente com o endereço do primeiro byte, é uma convenção conveniente e amplamente compreendida para economizar espaço de exibição e mostrar "pontos de referência" (endereços) suficientes para que não se perca.
Jamie Hanrahan
1
Adendo 2. Um endereço de memória não contém dados. Um endereço de memória diz onde os dados é . A memória no endereço contém dados.
Jamie Hanrahan