[英]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.