[英]C++ Local var in dynamic, on stack?
假設我在動態 memory(新)中有一個 object,在它的一個函數中,它有
int Obj1::Add(int a, int b)
{
int c = a + b;
return c;
}
c(以及 a 和 b...)在堆棧中嗎? 或者在動態 memory 和我的 object 中。只是好奇:) 謝謝
所有這些都將在堆棧中。 a
和b
是傳遞參數,因此,即使原件在堆中,也會在堆棧中制作副本。 如果您通過引用傳遞,這可能是另一回事,因為實際發送的東西(“引擎蓋下”)更像是指向原件的指針。
對於c
,因為它是一個局部變量,所以它也在堆棧上。
這當然是假設您的實現甚至使用堆棧,並且優化不只是將它們存儲到寄存器中。 這真的完全取決於實施。
C++ 標准中沒有明確提及術語“堆棧”或“堆”。 相反,需要一個 C++ 編譯器來根據特定的“存儲持續時間”來實現:
但出於對當今處理器和編譯器的實用目的,您通常可以假設 a/b/c 在堆棧或寄存器中。
這真的取決於編譯器。 在 Sparc 上,這三個都在寄存器中,我希望這是最常見的情況。 只有在 Intel 32 位(或 16 位,如果您及時返回 go)上, a
和b
才會在堆棧中。
這些都與很多事情無關。 關於您問題的關鍵點(我認為):它們都不會成為this
引用的 object 的一部分。 無論編譯器如何組織事物,這三個變量都將位於 object 之外的其他地方。即使 object 本身在堆棧上,並且您使用的是 arguments 等也在堆棧上的 Intel 架構,object 和變量將位於堆棧的不同位置。
a
, b
和c
在堆棧上(或可能在寄存器中)。
他們都在堆棧上。 但是,將 c 返回給調用者仍然是安全的,因為會生成一個副本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.