Re: [問題] 請問call by address

看板PLT (程式語言與理論)作者 ( )時間17年前 (2007/04/12 10:23), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串11/11 (看更多)
※ 引述《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
文章代碼(AID): #167PWafq (PLT)
討論串 (同標題文章)
文章代碼(AID): #167PWafq (PLT)