簡體   English   中英

C++ 動態局部變量,在堆棧上?

[英]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 中。只是好奇:) 謝謝

所有這些都將在堆棧中。 ab是傳遞參數,因此,即使原件在堆中,也會在堆棧中制作副本。 如果您通過引用傳遞,這可能是另一回事,因為實際發送的東西(“引擎蓋下”)更像是指向原件的指針。

對於c ,因為它是一個局部變量,所以它也在堆棧上。

這當然是假設您的實現甚至使用堆棧,並且優化不只是將它們存儲到寄存器中。 這真的完全取決於實施。

C++ 標准中沒有明確提及術語“堆棧”或“堆”。 相反,需要一個 C++ 編譯器來根據特定的“存儲持續時間”來實現:

C++ 調用堆棧不符合標准?

但出於對當今處理器和編譯器的實用目的,您通常可以假設 a/b/c 在堆棧或寄存器中。

這真的取決於編譯器。 在 Sparc 上,這三個都在寄存器中,我希望這是最常見的情況。 只有在 Intel 32 位(或 16 位,如果您及時返回 go)上, ab才會在堆棧中。

這些都與很多事情無關。 關於您問題的關鍵點(我認為):它們都不會成為this引用的 object 的一部分。 無論編譯器如何組織事物,這三個變量都將位於 object 之外的其他地方。即使 object 本身在堆棧上,並且您使用的是 arguments 等也在堆棧上的 Intel 架構,object 和變量將位於堆棧的不同位置。

abc在堆棧上(或可能在寄存器中)。

他們都在堆棧上。 但是,將 c 返回給調用者仍然是安全的,因為會生成一個副本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM