【发布时间】:2021-05-02 15:35:45
【问题描述】:
我尝试使用 MSVC 将以下 c 代码编译成带有 (CL TestFile.c /Fa /Ot) 和没有优化 (CL TestFile.c /Fa) 的程序集,结果是它们产生了相同的堆栈深度。
当编译器知道最多使用 16 个字节时,为什么要为 3 个变量 x、y 和 z 中的每一个使用 8 个字节?而不是y$1 = 4 和z$2 = 8 可以不使用y$1 = 4 和z$2 = 4 所以y 和z 在堆栈上使用相同的内存没有任何问题?
int main() {
int x = 123;
if (x == 123) {
int y = 321;
}
else {
int z = 234;
}
}
; Parts of the assembly code
x$ = 0
y$1 = 4
z$2 = 8
main PROC
$LN5:
sub rsp, 24
; And so on...
【问题讨论】:
-
我现在尝试编译使用:CL TestFile.c /Fa /Ot 所以它会优化,但输出是一样的。编译器似乎没有对此进行优化。
-
我希望这个程序能够编译成一个完全优化的返回指令,因为它什么都不做。
-
@EugeneSh。不稳定的,它们不应该被优化出来
-
@0___________ Volatile 可能还有其他一些影响我猜...因为这个问题是关于某些优化的
标签: c assembly compiler-construction compiler-optimization