İsm*_*can 14 c++ 64-bit pointers c++builder
我试图理解64位编译,所以我在C++ Builder中做了一点测试:
int i = 12345;
ShowMessage(i);
int *pi = &i;
ShowMessage(sizeof(pi));
Largeint li = 9223372036854775807;
ShowMessage(li);
Largeint *pli = &li;
ShowMessage(sizeof(pli));
Run Code Online (Sandbox Code Playgroud)
当我将此程序编译为64位时,指针的大小增加到8个字节(64位).
指针大小增加的优点是什么?
oo_*_*uel 29
甲指针可以保持地址中的单个字节的存储器.根据其大小,您可以计算给定指针可以存储的不同值的最大数量.
使用4字节(32位)的指针,您只能处理4GB内存,因为:
2^32 = 4294967296
Run Code Online (Sandbox Code Playgroud)
另一方面,一个8字节(64位)指针能够在理论上解决更广泛的17179869184GB范围:
2^64 = 18446744073709551616
Run Code Online (Sandbox Code Playgroud)
这是16EB(exabytes).
在实践中,它是非常少,因为在大多数处理器和内存等的物理尺寸的限制比,
您可以在此处阅读有关此主题的更多信息:https:
//en.wikipedia.org/wiki/64-bit_computing#Limitations_of_practical_processors
除非你想回到过去的内存分页(记得20世纪80年代的那些16位Z80机器有128k RAM),或者早期的DOS扩展内存,那么你需要不止一个32位指针来解决所有可用内存的问题.一台现代机器.
64位指针是64位架构的自然选择(尽管不是必需的).
需要注意的是不同类型的指针不必须是相同的大小:sizeof(double*)
并不一定必须是相同的sizeof(int*)
,例如.