1 c memory compiler-construction
在c中,当我写:
printf("结果%d",72和184);
"72和184"在内存中是否有块(例如72占用4个字节,184占用4个字节?...)
由于72 & 184是常量表达式,因此编译器可能会在编译时评估答案,而不是生成代码以在运行时计算相同的结果.
答案恰好是8,所以声明如下:
printf("result %d ", 8);
Run Code Online (Sandbox Code Playgroud)
在这种情况下,编译器可能会生成所谓的立即推送到参数堆栈,其中值8嵌入到机器指令中.这可能与推送更大的值(如12345678)不同,后者可能对于立即推送而言太大,然后可能需要存储在程序存储器中.
以上内容完全取决于您编译程序的CPU体系结构,以及编译器的功能和优化设置.