c - My 64 bit machine can only store 4 bytes each memory location -


my computer 64bit mac.

how many bytes of information stored in 1 of these locations in memory?

when tried in gdb

x /2x first 0x7ffff661c020: 0xf661b020      0x00007fff  

my code

#define put(p, val) (*((size_t *)(p)) = (val)) put(first, (size_t)some pointers); 

i use gcc -g compile

it seems 4 bytes store in 0x7ffff661c020 . 0x00007fffstores in 0x7ffff661c024. why cant store 0x00007ffff661b020 in 0x7ffff661c020.

thanks

each memory location can store 8 bits, because memory byte addressable. 64-bit machine doesn't give 64 bits in every memory location, means can naturally handle 64 bits @ time.

for example, registers 64 bits wide (unless intentionally manipulate sub-registers ax or eax instead of 64-bit rax), , can load many bits memory single instruction.

you can see it's byte addressable fact 2 addresses have difference of 4 between them:

0x7ffff661c020: 0xf661b020 0x7ffff661c024: 0x00007fff               \____________/ four-byte                            \ difference 

and, if used byte-based output, you'd see more "naturally", such as:

(gdb) x/8xb first 0x7ffff661c020: 0x20 0xb0 0x61 0xf6 0xff 0x7f 0x00 0x00 

so 64-bit value @ 0x7ffff661c020 is 0x00007ffff661b020 expected, need adjust gdb command out full 64-bit values, like:

x/1xg first 

where 1xg means 1 value, hex format, giant word (eight bytes). details on x command can found here, important bit question description of unit size (my bold):

  • b = bytes.
  • h = halfwords (two bytes).
  • w = words (four bytes). this initial default.
  • g = giant words (eight bytes).

Comments

Popular posts from this blog

python - TypeError: start must be a integer -

c# - DevExpress RepositoryItemComboBox BackColor property ignored -

django - Creating multiple model instances in DRF3 -