James Parker
James Parker

Reputation: 285

Memory, Stack and 64 bit

On a x86 system a memory location can hold 4 bytes (32 / 8) of data, therefore a single memory address in a 64 bit system can hold 8 bytes per memory address. When examining the stack in GDB though this doesn't appear to be the case, example:

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

If I have this right then each hexadecimal pair (48) is a byte, thus the first memory address 0x7fff5fbffa20: is actually holding 16 bytes of data and not 8.

This has had me really confused and has for a while, so absolutely any input is vastly appreciated.

Upvotes: 0

Views: 343

Answers (1)

Lorenzo Dematté
Lorenzo Dematté

Reputation: 7849

Short answer: on both x86 and x64 the minimum addressable entity is a byte: each "memory location" contains one byte, in each case. What you are seeing from GDB is only formatting: it is dumping 16 contiguous bytes, as the address increasing from ....20 to ....30, (on the left) indicates.

Long answer: 32bit or 64bit is used to indicate many things, in an architecture: almost always, is the addressable size (how many bits are in an address = how much memory you can directly address - again, bytes of memory). It also usually indicates the dimension of registers, and also (but not always) the native word size. That means that usually, even if you can address a single byte, the machine works "better" using data of different (longer) size. What "better" means is beyond the question; a little background, however, is good to understand some misconceptions about word size in the question.

Upvotes: 2

Related Questions