Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 什么是「;“真正的”;动态数组占用的内存大小? 例子: 问题:_Delphi - Fatal编程技术网

Delphi 什么是「;“真正的”;动态数组占用的内存大小? 例子: 问题:

Delphi 什么是「;“真正的”;动态数组占用的内存大小? 例子: 问题:,delphi,Delphi,内存中占用的AText的实际大小是多少?是它长度的7+基数大小,即7+4=11字节吗?加上4字节引用计数。当然还有heapmanager开销(这取决于delphi版本并使用内存管理器,内存管理器很容易达到12-16字节) 这意味着: sizeof(元素)*元素计数 sizeof(参考计数) 当前实现:sizeof(整数)=4 sizeof(元素编号) FPC实际上存储最高的元素,而不是elementcount。(不了解德尔福) 当前实现:sizeof(整数)=4 堆开销。 至少是为整

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

加上4字节引用计数。当然还有heapmanager开销(这取决于delphi版本并使用内存管理器,内存管理器很容易达到12-16字节)

这意味着:

  • sizeof(元素)*元素计数
  • sizeof(参考计数)
    • 当前实现:sizeof(整数)=4
  • sizeof(元素编号)
    • FPC实际上存储最高的元素,而不是elementcount。(不了解德尔福)
    • 当前实现:sizeof(整数)=4
  • 堆开销。
    • 至少是为整个块分配的大小
    • 可能还有一个或两个指针(下一个块)。但这取决于内存管理器
    • 许多内存管理器的最小块大小为16或32

Rudy Velthuis对动态阵列布局有一个解释:我是Uli。鲁迪写了我链接到的那篇文章谢谢你,马可。还有一个问题,Char的
数组[0..7]如何?@Astaroth:您应该将其作为一个单独的问题。在
sizeof(Char)=1
的版本中,仅将8个字节内联到包含类型中。没有额外的堆分配。Marco,为什么不:加上8个字节?(4字节引用计数和4字节长度)?@Jeroen,好的,我将发布另一个问题。
procedure Test;
var
  AText: array of AnsiChar;
begin
  SetLength(AText, 7);
end;