我的问题可以针对任何编程语言提出,但我想了解C++。我想知道中间值在C++中存储在哪里?例如,在以下代码中:
int func1(int);
int func2(int);
int func3(int);
int main(){
int a = 10;
int b = func1(func2(func3(a)));
cout<<b<<endl;
}
func3的返回值将存储在哪里?func2怎么样?它会存储在CPU缓存中吗?还是拉姆?此外,关于以下代码,a*b
的结果将存储在哪里?或任何中间值:
int main(){
int a = 10;
int b = 15;
int c = a*b+10*15;
cout<<c<<endl;
}
如果它依赖于编译器,请解释任何编译器,尤其是GCC。
由于您只声明了函数,我将假设它们位于单独的编译单元中。因此编译器必须为它们生成一个函数调用。不可能对函数进行内联或专门化(查找链接时间优化的方式并不总是正确的(。
函数的调用、参数的传递和返回方式在您所针对的体系结构和ABI的调用约定中定义。因此,这并不是编译器特有的,因为如果不同编译器的对象文件遵循相同的ABI,那么它们应该是兼容的。
因此,这控制了每个函数调用中发生的事情。在函数调用之间,值可以存储在堆栈或寄存器中,但通常编译器会尝试做最少的工作,从一个函数返回值的位置到下一个函数期望值的位置。
PS:如果编译器看到了函数的定义,那么所有的赌注都是。只要程序本身看不到任何变化,它就可以随心所欲。
这些中间值传统上存储在堆栈上,但要注意堆栈可能会溢出.com:(