每次调用的函数的堆栈框架是否多次不同?

问题描述 投票:0回答:1
void foo()
{
    int i;
    printf("%d",i++);
}

int main()
{
    int j;
    for(j=0;j<10;j++)
    {
        foo();
    }
}

代码的输出是一系列10个随机但连续的数字。我想知道如果每次都初始化i并且我的存储类也是auto时怎么办?还会在每次调用foo()时重新分配其堆栈框架吗?还是相同的堆栈框架?

c memory-management stackframe
1个回答
0
投票

如注释中所述,您没有显示递归函数调用。

无论如何,auto变量不会自动初始化,它们包含垃圾。这些变量通常通过快速堆栈操作在堆栈中分配。在foo()中,您具有这样的变量,因此printf输出随机数据。

即使递归调用了foo()函数,自变量问题仍然存在,每次调用都会产生一个包含垃圾的新stack frame

© www.soinside.com 2019 - 2024. All rights reserved.