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?


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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.