【发布时间】:2016-02-12 18:51:17
【问题描述】:
我对这样的 C 代码很好奇:
void test(int y){
if (y) {
int x = 1;
printf("Test: %d", x + y);
}
// other important code (don`t use x var)
}
x 变量的必要性取决于y。
例如:如果我们调用test(0),我们不需要为x变量分配空间,因为test(1)调用x变量必须存在于内存中。
现代编译器是否使用这种技术?
【问题讨论】:
-
不一定。只是为了限制范围。
-
@SouravGhosh 即使我经常调用这个函数(当 y = 0 时)?
-
也许有一些类似于
likely,unlikely的编译器提示? -
编译器将做什么,将随着优化级别的不同而有很大差异(当然还有编译器),请参阅this godbolt 并将
-O0更改为-O3跨度> -
@kirugan 没有什么可以确定的!! :)
标签: c memory assembly compiler-optimization dynamic-allocation