widestring在内存中的分配(50分)

  • 主题发起人 主题发起人 poy
  • 开始时间 开始时间
P

poy

Unregistered / Unconfirmed
GUEST, unregistred user!
写了一个测试:
procedure TForm1.Button1Click(Sender: TObject);
var
s :widestring ;
begin
s :='abcde';
caption := inttostr(length(s)) ;
end;
s只是个指针指向内存中的widestring对象,于是在 第二行中设断点,执行时打开CPU,看到的指向是$001489A8,再看$001489A8,确是存放 a: '$0061' b'$0062' c '$0063' d'$0064' ,可是有个疑问:我认为widestring对象应该在堆中,而这个$001489A8地址虽然它也不是在栈,但让我怀疑是否是在堆内,如若不是那它又是在哪?
请高手解惑 !
 
编译器优化了,你的s根本不作改动,编译器自动把他编译成常量了.
 
楼上的:
S 只是个指针而以....你可以打开CPU看看...
 
知道,S指向的地址是常量地址.
 
函数和过程所定义的局部变量是在堆栈中分配的,只有动态分配的内存才会使用堆--“堆栈”和“堆”是两种不同的存储区。
 
后退
顶部