64位系统上更大指针的好处是什么?

时间:2015-11-04 08:10:24

标签: c++ pointers 64-bit 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));

当我将此程序编译为64位时,指针的大小增加到8个字节(64位)。

增加指针大小的优点是什么?

3 个答案:

答案 0 :(得分:29)

指针可以保存内存中单个字节的地址。根据其大小,您可以计算给定指针可以存储的不同值的最大数量。

如果指针 4个字节 32位),则仅限地址 4GB ,因为:

2^32 = 4294967296

另一方面, 8字节 64位)指针能够在理论上解决更广泛的 17179869184GB 范围:< / p>

2^64 = 18446744073709551616

16EB (exabytes)。

练习中,由于大多数处理器的限制以及内存的物理尺寸等因此

您可以在此处详细了解此主题:
https://en.wikipedia.org/wiki/64-bit_computing#Limitations_of_practical_processors

答案 1 :(得分:7)

除非你想回到旧时的内存分页(记得那些20世纪80年代的16位Z80机器有128k RAM),或早期的DOS扩展内存,那么你需要超过32位指针来解决所有的问题。现代机器上的可用内存。

64位指针是64位架构的自然选择(尽管不是必需的)。

请注意,不同类型的指针必须具有相同的尺寸:sizeof(double*) 必然必须与{{1}相同例如。

答案 2 :(得分:2)

正如其他答案所解释的那样,很自然地有一个指针类型可以统一无缝地指示存储器中的任意位置。

现在,如果你有一个复杂的数据结构,使用它们之间的小对象和指针(如图形,树),当你用64位编译时,指针占用的内存将加倍,这是一个缺点(和这可能是你问这个问题的原因。

请注意,所有这些数据结构(图形,树,哈希映射等)也可以在内存中的连续数组中实现,并通过索引访问(例如FORTRAN程序员如何实现它们),如果你事先知道你有少于40亿个元素,那么你可以将你的索引表示为32位整数,即使你在64位模式下编译(这就是我正在为3D网格建模软件做的事情)。 p>