gpt4 book ai didi

delphi - 是否可以获取Delphi 7中指针指向的类型的大小?

转载 作者:行者123 更新时间:2023-12-03 18:56:18 25 4
gpt4 key购买 nike

我想在以下函数中获取任何“记录”类型的大小。但似乎不起作用:

function GetDataSize(P : Pointer) : Integer;
begin
Result := SizeOf(P^); // **How to write the code?**
end;


例如,以下记录的大小为8个字节

SampleRecord = record
Age1 : Integer;
Age2 : Integer;
end;


但是 GetDataSize(@a)始终返回1(当然,a是SampleRecord类型的变量)。我该怎么办?

我注意到Delphi有一个过程程序New(var P:Pointer),可以分配与P指向的类型的大小相对应的存储块。如何获得尺寸?

最佳答案

New知道要分配多少内存的原因是New是编译器不可思议的。这是一种内置语言,因此当编译器看到您调用它时,它会将其重写为以下形式:

// New(foo);
foo := System._New(SizeOf(foo^), TypeInfo(TypeOf(foo^)));


TypeOf这是出于说明目的的虚构Delphi函数。编译器知道 foo的声明类型,因为它知道所有变量声明在哪里。您可以在System.pas中查看 _New的实现。 Dispose也会发生类似的重写,因此它知道在释放内存之前要执行哪种终结处理。

变量和声明的思想是编译时概念。在运行时,它们不再存在。在运行时,指针只是一个地址。指向的类型在编译时确定。类型决定什么东西的大小。

如果您需要编写一个函数来接受指向大小不同的多个事物的指针,则只需提供第二个参数来描述第一个参数所指向的内容。

在这里查看另一个问题“ How to know what type is a var”。询问者想知道如何在仅给出变量地址的情况下确定有关该变量的更多信息。

关于delphi - 是否可以获取Delphi 7中指针指向的类型的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/969007/

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