动态数组占用的“实际”内存大小是多少?

时间:2010-12-15 10:25:04

标签: delphi

实施例

procedure Test;
var
  AText: array of AnsiChar;
begin
  SetLength(AText, 7);
end;

问题

内存中占用 AText 实际大小是多少?是7 +长度的基数大小,即7 + 4 = 11字节?

1 个答案:

答案 0 :(得分:5)

加上4个字节的引用计数。当然堆管理器开销(这取决于delphi版本并使用内存管理器,它可以很容易地为12-16字节)。

这意味着:

  • sizeof(element)* elementcount
  • 的sizeof(引用计数)
    • 当前实现:sizeof(整数)= 4
  • 的sizeof(elementnumber)
    • FPC实际上存储了最高元素,而不是元素数量。不知道Delphi)
    • 当前实现:sizeof(整数)= 4
  • 堆开销。
    • 至少为整个块分配的大小。
    • 也可能是一个或两个指针(下一个块)。但这取决于内存管理器
    • 许多内存管理器的最小块大小为16或32.