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

时间:2009-11-05 23:46:14

标签: c memory compiler-construction

在c中,当我写道:

printf(“结果%d”,72& 184);

“72& 184”是否在内存中获得一个块(例如72占用4个字节,184占用4个字节?...)

2 个答案:

答案 0 :(得分:5)

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

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

相同
printf("result %d ", 8);

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

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

答案 1 :(得分:2)

这可能取决于您使用的编译器。通过优化,编译器可以将该指令折叠为一个值。该值将与其余代码一起驻留在内存中,但在执行该行时,它将驻留在cpu寄存器中。

我不确定是否有任何编译器会使用实际值优化%d:)