内存,堆栈和64位

问题描述 投票:0回答:1

在x86系统上,一个内存位置可以容纳4个字节(32/8)的数据,因此在64位系统中,单个内存地址可以为每个内存地址保留8个字节。在GDB中检查堆栈时,情况似乎并非如此,例如:

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

如果我有这个权利,那么每个十六进制对(48)都是一个字节,因此是第一个内存地址0x7fff5fbffa20:实际上保存的是16个字节的数据,而不是8个。

这让我感到非常困惑,并且有一段时间了,因此,绝对感谢任何输入。

在x86系统上,一个内存位置可以容纳4个字节(32/8)的数据,因此在64位系统中,单个内存地址可以为每个内存地址保留8个字节。当在GDB中检查堆栈时...

macos gdb 64-bit x86-64 memory-address
1个回答
1
投票

简短回答:在x86和x64上,最小可寻址实体都是一个字节:在每种情况下,每个“内存位置”都包含一个字节。您从GDB看到的只是格式化:它正在转储16个连续的字节,因为地址从.... 20增加到.... 30(在左侧)表示。

© www.soinside.com 2019 - 2024. All rights reserved.