我意识到(艰难的,一小时的调试)我的Delphi 2010编译器优化关闭(和1字节的记录对齐)不为未使用的变量分配内存。如果定义如下:
var x,y,z:longint; a1,a2,a3:whatever;
和y未使用(实际上,我暂时从项目中删除了一个表单,它独占引用该变量),然后为z分配了地址x + 4。很好,除了我有很多代码,现在将z与a1混合。这可以通过某些开关来控制吗?谢谢。
答案 0 :(得分:4)
这不会奏效。编译器将优化所有未使用的变量。
您可以做的是定义打包记录,如下:
type
TMyData = packed record
x,y,z: longing;
a1,a2,a3: whatever;
end;
然后,分配的TMyData
将始终作为一个分配,包括所有内部变量,即使它们未在您的代码中使用。
对于在堆栈上分配的临时变量,您可以使用:
function DoSomething();
var loc: packed record
x,y,z: longing;
a1,a2,a3: whatever;
end;
begin
loc.x := 10;
...