作者tinlans ( )
看板PLT
标题Re: [问题] 请问call by address
时间Thu Apr 12 10:23:29 2007
※ 引述《caml (suitengu)》之铭言:
: 来看一下c style的stack
: | ...... |
: | func parameter3 |
: | func parameter2 |
: | func parameter1 |
: | return addr |
: | old ebp |
: | local var1 |
: | local var2 |
: | local var3 |
: | ...... |
: &var运算的地址在call foo之前由main放入func parameter1里。
: ptr根本就不在local variables里﹐哪里生成temp obj还push到stack上﹖﹖
OK,
那这里有一个问题,
对任何 machine 而言 (我说「任何」就是要注意一般性),
&var 的运算结果,
在「算出来」到「放入 func parameter1」之前,
你要摆在哪里?
不管你摆在是 register 还是 stack 都好,
这种东西就叫 temporary object。
也许你会认为 C++ 那种做过 overloading 的 operator,
才会有所谓的 temporary object 这回事,
但事实上并非如此。
如果你还是不太明白我在第一段说什麽,
你可以先想想 non-static local variable 的 address 是怎样算出来的,
既然你也知道它是位在 stack 上,
那就势必得经由 sp + offset 或 fp - offset 这种方法算出来。
当然,
compiler 可以做 machine-dependent optimization,
把这些 temporary object 化简,
但我们在讲 language 的时候,
最深也只会 down 到 machine-independent 的部分而已,
所以必须考虑到一般性。
--
Name: Tseng, Ling-hua E-mail Address:
[email protected]
School: National Tsing Hua University Department: Computer Science
Interesting: C++, Compiler, PL/PD, OS, VM, Large-scale software design
Researching: Software pipelining for VLIW architectures
Homepage:
https://it.muds.net/~uranus
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.230.223.222