Ali*_*ter 2 delphi parameters record
如果我有记录,例如
type
TMyRec = record
x : string;
end;
Run Code Online (Sandbox Code Playgroud)
还有一个procedure test(const x : TMyRec);
.为什么该参数按值传递(即传递副本)而不是通过引用传递.我会从效率的角度考虑它应该通过引用传递(比如说整数).
看起来这与记录的大小有关
procedure test(const x : TMyRec);
Run Code Online (Sandbox Code Playgroud)
类型
type
TMyRec = record
x : Array[1..4] of byte;
end;
Run Code Online (Sandbox Code Playgroud)
将按值传递,并且
type
TMyRec = record
x : Array[1..5] of byte
end;
Run Code Online (Sandbox Code Playgroud)
将通过32位参考传递,对于64位,我们需要在东京(10.2.3)或更早的时候通过引用传递9个字节的记录,Rio(10.3)在32位和64位上表现相同.感谢所有对我的问题发表评论的人,并提供了额外的参考/建议.
请在此处查看东京文档.特别是
值和常量(const)参数按值或引用传递,具体取决于参数的类型和大小:
...
设置,记录和1,2或4个字节的静态数组作为8位,16位和32位值传递.较大的集合,记录和静态数组作为32位指针传递给该值.此规则的一个例外是记录总是直接在cdecl,stdcall和safecall约定下的堆栈上传递; 以这种方式传递的记录的大小向上舍入到最近的双字边界.
如果要强制传递引用,可以将参数声明为const [ref]
,如下所示:
procedure test(const [ref] x : TMyRec);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
201 次 |
最近记录: |