Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Memory 内存地址中的位_Memory_Assembly_Stack_Memory Address - Fatal编程技术网

Memory 内存地址中的位

Memory 内存地址中的位,memory,assembly,stack,memory-address,Memory,Assembly,Stack,Memory Address,在Windows XP 32位上使用免疫调试器进行调试时,我在堆栈上看到以下内容: _Address_ -Value_ 00ff2254 ff090045 00ff2258 00000002 我的理解是每个地址位置包含8位 这是否正确?如果我正确理解了您的问题,答案是肯定的,每个单独的内存位置都包含8位 调试器一次显示4个字节(32位),以使显示更紧凑(而且由于许多数据类型占用32位,因此查看32位值通常很有用)。这就是为什么左列中的地址相隔4个位置 如果调试器一次显示一个字节(8位),则显示

在Windows XP 32位上使用免疫调试器进行调试时,我在堆栈上看到以下内容:

_Address_ -Value_
00ff2254 ff090045
00ff2258 00000002
我的理解是每个地址位置包含8位


这是否正确?

如果我正确理解了您的问题,答案是肯定的,每个单独的内存位置都包含8位

调试器一次显示4个字节(32位),以使显示更紧凑(而且由于许多数据类型占用32位,因此查看32位值通常很有用)。这就是为什么左列中的地址相隔4个位置

如果调试器一次显示一个字节(8位),则显示如下:

_Address_ -Value_
00ff2254 45
00ff2255 00
00ff2256 09
00ff2257 ff
00ff2258 02
00ff2259 00
00ff225a 00
00ff225b 00

(假设您在一台“”计算机上,大多数现代台式PC都是这样。)

内存位置指内存位置,每个连续的内存位置指内存中的下一个字节。因此,您只能在一个字节边界上寻址内存,每个人都应该知道一个字节有8位宽。

我认为您的问题的主要问题是您要求一件事,但我发现隐藏在阴影中的另一个问题

首先,也是最重要的,计算机内存中的可寻址实体是以字节的形式组织的,每个字节有8位,因此,是的,每个地址可以说是指8位或一个字节

但是,您可以轻松地将更多字节组合在一起,形成更大、更复杂的数据结构

如果您的问题是“为什么我在堆栈转储中看到一个8位的值作为地址的内容”,那么原因是它转储32位(4字节)的值

换言之,您可以获取地址、地址+1、地址+2和地址+3,从每个地址中获取字节,并组合为32位值


这真的是你的问题吗?

要完成RH的答案,你可能会惊讶于给定地址有这么多数字

你应该考虑< /P>
Address  Byte (8 bits)
00ff2254 45
00ff2255 00
00ff2256 09
00ff2257 ff
00ff2258 02
... 

(在XP使用的cpu体系结构上)

请注意,人们通常只能回答您实际提出的问题。我可以进一步提问吗?为什么每个地址都包含8位。这是因为内存芯片结构吗?或者是因为32位CPU。对于另一个操作系统,如FreeBSD、Mac、Linux,这是8位吗?8位或字节是计算机中常见且方便的数据单元()。方便,因为作为2(2^3位)的幂,它足够小,同时能够存储所有罗马字符。8位是您可以从内存中获取的最小数据量。具有32位内存总线的计算机允许在一次操作中检索32位—速度更快—但最小数据单元仍然是8位。