Re: [問題] 請問call by address
※ 引述《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: uranus@it.muds.net
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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 11 之 11 篇):
PLT 近期熱門文章
PTT數位生活區 即時熱門文章