gpt4 book ai didi

string - 如何计算字符串变量使用的实际内存?

转载 作者:IT王子 更新时间:2023-10-28 23:30:09 26 4
gpt4 key购买 nike

Delphi 中的字符串位于动态内存中。

如何计算 string 变量使用的实际内存(以字节为单位)?

我知道字符串必须存储一些额外的信息,至少是引用计数和长度,但是除了字符之外它使用了多少字节?

var
S: string;

使用 Delphi 2010、XE、XE2

最佳答案

取自 Embarcadero 官方文档的 32 位 UNICODE DELPHI 的布局如下:

UNICODE DELPHI

请注意,在 64 位版本中有一个额外的 longint 字段,用于 16 字节对齐。 'system.pas' 中的 StrRec 记录如下所示:

StrRec = packed record
{$IF defined(CPUX64)}
_Padding: LongInt; // Make 16 byte align for payload..
{$IFEND}
codePage: Word;
elemSize: Word;
refCnt: Longint;
length: Longint;
end;

有效载荷的大小始终为 2*(Length+1)。对于 32 位或 64 位目标,开销为 12 或 16 个字节。请注意,实际内存块可能比内存管理器确定的需要大。

最后,这个问题有很多错误信息。在 64 位目标上,字符串仍由 32 位有符号整数索引。

关于string - 如何计算字符串变量使用的实际内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10910631/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com