gpt4 book ai didi

静态全局变量可以优化到栈中吗?

转载 作者:太空宇宙 更新时间:2023-11-04 07:57:55 24 4
gpt4 key购买 nike

假设我在我的 C 文件中声明了一个静态全局变量:

static int my_var = 0;

并且只在该文件的一个函数中使用它:

static void func1(void)
{
my_var = 1;
my_var++;
printf("my_var = %d\n", my_var);
}

这里重要的是 my_var 被一个值覆盖(在本例中为 1,但可以是函数或计算)。假设 my_var 总是在 func1() 中以一个不依赖于“最后”调用 func1() 的预定值开始它的生命,编译器能否注意到并优化存储在堆栈中的变量?

您一定会问自己,为什么我不直接使用局部变量呢?你问的是对的,但这是我工作中的新 C 开发人员常犯的错误,我想知道编译器是否可以优化此路径,因为你可以看到 my_var 的依赖图,并且决定不应该'问题不大。

最佳答案

不仅如此,gcc 还将完全消除该变量。 https://godbolt.org/g/x947ck

.LC0:
.string "my_var = %d\n"
func1():
mov esi, 2
mov edi, OFFSET FLAT:.LC0
xor eax, eax
jmp printf

请注意它是如何计算出 my_var 始终为 2 的,并且根本不为该变量分配内存。

关于静态全局变量可以优化到栈中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48771831/

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