为什么64位计算机上的指针大小是32位计算机的2倍?
指针在32位/64位架构下大小不同的原因
- 指针的本质是内存地址的存储容器,它的大小完全由CPU的寻址位宽决定,和指针指向的数据类型没有关系:
- 32位架构的CPU最大支持2^32个内存地址寻址,换算下来最多只能识别4GB的内存空间,每个地址用32个二进制位存储,刚好对应4字节,所以所有指针大小都是4字节
- 64位架构的CPU寻址位宽扩展到了64位,理论最大寻址空间可达2^64字节(远大于当前民用设备的内存上限),每个地址需要64个二进制位存储,对应8字节,因此指针大小统一为8字节
- 你给出的示例代码存在语法错误,正确可运行的写法如下:
#include <iostream> int main() { int i = 1; int* ptr = &i; std::cout << "Size of pointer to i is " << sizeof(ptr) << std::endl; return 0; }
- 补充说明:同一架构下不管指针指向int、double、自定义结构体还是函数,大小都是固定的,因为所有指针存的都是对应目标的内存起始地址,和目标本身的大小无关。
内容的提问来源于stack exchange,提问作者Svalbard
相关产品推荐
相关产品推荐

