在c中,当我写道:
printf(“结果%d”,72& 184);
“72& 184”是否在内存中获得一个块(例如72占用4个字节,184占用4个字节?...)
答案 0 :(得分:5)
由于72 & 184
是常量表达式,因此编译器可能会在编译时评估答案,而不是生成代码以在运行时计算相同的结果。
答案恰好是8,所以声明与:
相同printf("result %d ", 8);
在这种情况下,编译器可能会生成所谓的立即推送到参数堆栈,其中值8嵌入到机器指令中。这可能与推送更大的值(如12345678)不同,后者可能对于立即推送而言太大,然后可能需要存储在程序存储器中。
以上内容完全取决于您编译程序的CPU架构,以及编译器的功能和优化设置。
答案 1 :(得分:2)
这可能取决于您使用的编译器。通过优化,编译器可以将该指令折叠为一个值。该值将与其余代码一起驻留在内存中,但在执行该行时,它将驻留在cpu寄存器中。
我不确定是否有任何编译器会使用实际值优化%d
:)