使用IMAGE_FILE_LARGE_ADDRESS_AWARE 32bit - 64bit时的表/指针

时间:2010-10-21 08:48:39

标签: delphi 32bit-64bit

让我问一个非常具体的问题: 当你有一个大型数组时,有什么区别(内存使用情况), 或大小相同的大型列表(用指针实现)。 e.g

var a:array[1..1000000] of integer;

type
  po=^p1;
  p1=record
     v:integer; 
     next:po;
  end;
var p:po;

并创建包含1000000个整数的列表。

  1. 指针实现会使用比数组更多的内存吗?
  2. 因为,64位计算机的差异会更大 指针是64位。

2 个答案:

答案 0 :(得分:0)

x86 bpointers是4个字节(32位)。 x64指针是8个字节(64位)。

  1. 是的,按每条记录的指针大小(即指针大小的100万倍)加上一个指向列表的初始指针的大小。
  2. 是的,每条记录至少4个字节,初始记录至少4个字节。
  3. 在2.,它是最小尺寸增加。实际的大小增加可能更大,取决于Embarcadero将如何在x64世界中记录打包和字段对齐。

    - 的Jeroen

答案 1 :(得分:0)

记录大小为8个字节(在32位Delphi上),数组为4个字节(*长度)。

假设指针的大小在即将到来的64位Delphi中为8个字节,则记录为12个字节(如果整数保持为4,我认为)。

PS:我认为最好将大型数组声明为动态,因为动态数组的内存是在堆而不是堆栈上分配的。