printf中的参数是否位于内存中?

1 c memory compiler-construction

在c中,当我写:

printf("结果%d",72和184);

"72和184"在内存中是否有块(例如72占用4个字节,184占用4个字节?...)

Gre*_*ill 5

由于72 & 184常量表达式,因此编译器可能会在编译时评估答案,而不是生成代码以在运行时计算相同的结果.

答案恰好是8,所以声明如下:

printf("result %d ", 8);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,编译器可能会生成所谓的立即推送到参数堆栈,其中值8嵌入到机器指令中.这可能与推送更大的值(如12345678)不同,后者可能对于立即推送而言太大,然后可能需要存储在程序存储器中.

以上内容完全取决于您编译程序的CPU体系结构,以及编译器的功能和优化设置.