系统给例程分配固定的内存?(0分)

  • 主题发起人 主题发起人 vinlin
  • 开始时间 开始时间
V

vinlin

Unregistered / Unconfirmed
GUEST, unregistred user!
vinlin(30078256) 00:16:37
type
IntProc =proceduce (n:integer);
...
procedure TForm1.RadioButton2Click(Sender: TObject);
IP:IntProc;
begin
IP := TripleTheValue;
ShowMessage(format('''%p''',[@IP]));
end;
想问一下,每次RUN,显示@P都是等于:“00452C4C”
是否说明系统每次为某个过程分配内存时都会保持不变呢?
那位FW解析一下。
 
这不奇怪啊。
只要源码没有大的变化, delphi 编译出来的函数就是差不多地址的啊,看看这个例子:

type
IntProc = procedure (n:integer);

procedure TripleTheValue0(n:integer);
begin
Now;
end;

procedure TripleTheValue1(n:integer);
begin
Now;
end;

procedure TripleTheValue2(n:integer);
begin
Now;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
IP:IntProc;
begin
IP := TripleTheValue1;
ShowMessage(format('''%p''',[@IP]));

// IP := TripleTheValue0;
// IP := TripleTheValue1;
end;

分别加上 IP := TripleTheValue0
和 IP := TripleTheValue1;
由于 delphi 使用 smart link 技术进行连接(只有使用到的函数才被链接到 exe),此时可以看到 IP 的变化。
 
WINDOWS怎么可能不同的时间保证哪个地址留给了这个程序呢?或者是我们看到 的是逻辑
空间?不对应物理空间?
比较难理解,如果方便请解析一下。如果太复杂,给点建议,看看那本书有作用,也不吝赐教。谢谢了。
 
接受答案了.
 
后退
顶部