0

x86システムでは、メモリ位置に4バイト(32/8)のデータを保持できるため、64ビットシステムの単一のメモリアドレスは、メモリアドレスごとに8バイトを保持できます。GDBでスタックを調べる場合、そうではないようですが、例:

0x7fff5fbffa20: 0x00007fff5fbffa48  0x0000000000000000
0x7fff5fbffa30: 0x00007fff5fbffa48  0x00007fff857917e1

私がこの権利を持っている場合、各16進ペア(48)はバイトであるため、最初のメモリアドレス0x7fff5fbffa20:は実際には8ではなく16バイトのデータを保持しています。

これは私を本当に混乱させ、しばらくの間持っていたので、絶対にどんな入力でも大いに感謝されます。

4

1 に答える 1

2

簡単な答え:x86とx64の両方で、アドレス可能な最小エンティティはバイトです。それぞれの「メモリ位置」には、いずれの場合も1バイトが含まれます。GDBから表示されているのはフォーマットのみです。アドレスが....20から....30(左側)に増加していることからわかるように、16個の連続したバイトがダンプされています。

長い答え:32ビットまたは64ビットは、アーキテクチャで多くのことを示すために使用されます。ほとんどの場合、アドレス指定可能なサイズです(アドレス内のビット数=直接アドレス指定できるメモリの量-繰り返しますが、メモリのバイト数)。また、通常、レジスタの次元と、(常にではありませんが)ネイティブワードサイズも示します。つまり、通常、1バイトをアドレス指定できたとしても、マシンは異なる(より長い)サイズのデータ​​を使用して「より良く」動作します。「より良い」とは、問題を超えています。ただし、少し背景を説明すると、質問の単語サイズに関する誤解を理解するのに役立ちます。

于 2013-01-24T14:40:31.633 に答える