可以分配一种类型的指针并将其作为不同的类型但具有相同的大小?

Mar*_*unu 5 delphi types pointers

可以分配一种类型的指针并将其作为不同的类型但具有相同的大小?我的意思是这样的:

procedure TForm1.Button1Click(Sender: TObject);
var A:PInt64;   // 64bit
    P:Pointer;
    B:PDouble;  // 64bit
begin
  New(A);
  P:=A;
  B:=P;
  Dispose(B);
end;
Run Code Online (Sandbox Code Playgroud)

假设我只想要8,16,32,64位有符号和无符号类型.没关系 ?

Dav*_*nan 6

如果指向的类型不是托管类型,那么这是安全的.在您的情况下,既不是Int64也不Double是托管类型,所以这是安全的.

托管类型的示例是String,接口,Variant,匿名过程/方法,包含托管类型的记录等.

在托管类型上使用NewDispose时,必须初始化并最终确定对象.当你使用NewDispose非托管类型时,它相当于调用GetMemFreeMem.

实际上,您不需要指向的类型具有相同的大小.进行调用时,FreeMem不传递类型的大小.指向的内存具有每个块的元数据,允许它解除分配整个块.

  • +1关于这整个问题的一些东西感觉有点像BASE跳跃......虽然发现一个*可以*确实从悬崖上跳起来像一只松鼠并安全降落在预定的目的地,这是令人震惊的鲁莽实际上目睹它正在进行的工作强制深入反省选择这一特定手段来完成工作的智慧. (2认同)