gpt4 book ai didi

c++ - 为什么代码块中的 cpp 会为函数中声明的变量分配相同的地址,即使它调用了很多次?

转载 作者:行者123 更新时间:2023-11-30 02:21:38 27 4
gpt4 key购买 nike

我在 Windows 平台上使用 GNU GCC 作为编译器在代码块中运行以下程序。在此程序中,我想检查函数中声明的整数是否更改了内存位置。我知道由于编译器优化,有时可能会发生变量即使声明多次也会保持相同地址的情况。但我调用它一百万次,然后它也需要相同的地址。我也尝试使用 volatile 关键字,即使使用 volatile 关键字也显示相同的输出。

#include <iostream>
using namespace std;
int* test (int a, int b)
{
int c=0;
c=c+a+b;
return &c;
}

int main()
{
int* pre;
pre = test(5,9);
int i=0;
for( i=0;i<1000000;i++)
{
int* cur = test(i,i+6);
if(cur!=pre)
{
cout<<"wrong";
}
}
cout<<i;
return 0;
}

最佳答案

enter image description here

这是一个堆栈。

您将盘子放在那个堆叠的顶部,并注意到它位于 8 号位置。

然后您从顶部取下盘子,然后将其放回原处 1000000 次。

你现在问为什么它总是在位置 8。

我的回答是,为什么它不在那里?


显然这是一个隐喻和对这里发生的事情的简化,要完全理解,您可以了解更多关于汇编以及函数调用的执行方式、参数推送、使用的寄存器、编译器优化等的信息,但总而言之, plates stack 是您问题的答案:

内存中的作用域变量以堆栈的形式存储。

您的变量只是从内存中的同一个位置放置和删除,调用函数将其压入堆栈并结束函数作用域将其从堆栈中弹出。

关于c++ - 为什么代码块中的 cpp 会为函数中声明的变量分配相同的地址,即使它调用了很多次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48117393/

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