取决于你编译应用类型的指针的大小。
指针就像是在32位应用程序中的32-bit unsigned int
,因为它存储内存位置。
如果应用程序是N-bit
应用程序,任何指针的大小将是N bits
长,因为它需要足够大以存储内存位置。
任何N-bit
可以运行的计算机N-bit
应用程序的RAM限制为2^N bytes
。这使得最大的内存位置ID等于2^N - 1
(因为0x00000000
是有效的内存地址)。
2^N - 1
要求N bits
以二进制表示,并且我的朋友是为什么指针在32位应用程序中的大小为4个字节的原因。
就拿为了简单起见,3-bit
应用为例:(我宁愿不处理大量)
让我们假设这是一个3-bit
机器上运行。由于2^3 - 1
是可用3 bits
以二进制表示的最大数字,因此系统可以处理的最大内存将为2^3
字节。 (这些是未签名的。负内存地址不存在)
可能的内存地址是:
0x0
(二进制表示:000
)
0x1
(二进制表示:001
)
0x2
(二进制表示: 010
)
0x3
(Binary representation:011
)
0x4
(二进制表示法:100
)
0x5
(二进制表示法:101
)
0x6
(二进制表示法:110
)
0x7
(二进制表示法:111
)
因此,指针指向一个内存地址在这种情况下需要有3 bits
。
将3
替换为32
这将适用于您在此处所做的事情。
(矫枉过正的回答多少?是的。为什么呢?因为我很无聊。)
在64位上尝试它,你会发现它是不同的。 :) – Mysticial 2013-03-21 02:05:43
这是一个奇怪的问题;你知道指针是什么吗?为什么你会期望它有不同的大小? – tenfour 2013-03-21 02:07:21
C++社区只是一个简单的问题,但我在短时间内收到很多回复。高兴!谢谢。 – 2013-03-21 02:13:06