【发布时间】:2012-10-31 23:38:11
【问题描述】:
我想获得结构/记录的“位置”。
假设我有这个记录:
type
MyStruct = record
MyInteger : Integer;
MyInteger2 : Integer;
MyInteger3 : Integer;
MyFunc : function (FirstParam : WideString; SecondParam : String) : Integer;
MyString : String;
MyString2 : WideString;
MyPchar : pchar;
end;
如您所见,这条记录的大小为 28 字节(7 vars x 4 字节)。基本上是因为所有变量都是 4 字节变量(例如整数)或指针(也是 4 字节)。 现在假设我们将这个结构加载到内存地址 (X = 0) 中(这也意味着 MyInteger 的地址将为 0)。 MyInteger3 的地址(例如)将是 8 (注意 X = 0 !) 如何动态获取结构的位置(编号/地址)?
希望你们明白我的意思吗? 提前致谢。
顺便说一句:
结构中的任何 Var 总是 4 个字节吗?
编辑:
如果您修复 spcae,这是错误的:String[100]
【问题讨论】:
-
不,结构中的变量并不总是 4 字节(小于 4 字节的事物类型,如 Word、Byte、Boolean、枚举等),并且并不总是在 4 字节内存边界上对齐(打包的记录、字对齐或 Int64 对齐的记录等)。在 64 位系统上,指针是 8 个字节。
-
@Remy - 你也没有提到编译器指令,开发者可以选择将对齐更改为 1、2、4 或 8 字节边界
标签: delphi memory-management struct delphi-7 record