gpt4 book ai didi

C++ CPU 寄存器使用

转载 作者:可可西里 更新时间:2023-11-01 15:34:05 26 4
gpt4 key购买 nike

在 C++ 中,局部变量总是分配在堆栈上。堆栈是您的应用程序可以占用的允许内存的一部分。该内存保存在您的 RAM 中(如果没有换出到磁盘)。现在,C++ 编译器是否总是创建将局部变量存储在堆栈上的汇编代码?

以下面的简单代码为例:

int foo( int n ) {
return ++n;
}

在 MIPS 汇编代码中,这可能看起来像这样:

foo:
addi $v0, $a0, 1
jr $ra

如您所见,我根本不需要为 n 使用堆栈。 C++ 编译器会识别并直接使用 CPU 的寄存器吗?

编辑:哇,非常感谢您几乎立即和广泛的回答! foo的函数体当然应该是return++n;,而不是return n++;。 :)

最佳答案

是的。没有“变量总是在堆栈上分配”的规则。 C++ 标准对堆栈只字不提。它不假定堆栈存在,或者寄存器存在。它只是说明代码应该如何表现,而不是应该如何实现。

编译器仅在必要时才将变量存储在堆栈上 - 例如,当它们必须在函数调用之后存在时,或者如果您尝试获取它们的地址。

编译器并不愚蠢。 ;)

关于C++ CPU 寄存器使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1832621/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com