lam*_*mas 15 c c++ memory compilation
我对C和C++如何处理未存储在变量中的数据感到好奇,例如:
int IE6_Bugs = 12345;
int Win_Bugs = 56789;
Run Code Online (Sandbox Code Playgroud)
是的 - 一切都很清楚.IE6_Bugs将123456存储在其特定的内存地址中.
那怎么样..
if ( IE6_Bugs + Win_Bugs > 10000 )
{
// ...
Run Code Online (Sandbox Code Playgroud)
因此,C抓取两个变量的值并添加它们,以便将结果与右侧的int进行比较.
但:
有IE6_Bugs+Win_Bugs没有达到内存?或者处理器是否通过自己的缓存直接比较值?
或者,在编译过程中,上面的if语句转换为机器更"可理解"的东西?(也许IE6_Bugs+Win_Bugs首先计算并将其存储在某个变量中,......)
Mah*_*dsi 18
它将被放置在CPU的寄存器中(假设有一个可用).寄存器是一种超快速超小型RAM,内置于CPU本身,用于存储中间操作的结果.
如果可以确定该值始终等于xxx,那么智能编译器将在其位置替换xxx的值.
请记住,无论是表达式还是数字(x + y vs 10),它仍然需要放在寄存器中,以便CPU可以访问它并根据其值执行操作.
有关更多信息,请阅读计算机体系结构.
在一般情况下,代码生成器直接在指令中编码这些值("立即模式寻址")或将它们存储在程序的数据段中以根据需要加载.
称为"常量折叠"的优化在编译时计算常量表达式的值.在您的特定示例中,智能编译器将识别您的条件将始终为真并避免为测试生成代码,因此在为您的程序生成的机器代码中可能根本不表示值12345,56789和10000.
你的编译器可能有一个选项,以保护您的程序,生成的中间汇编语言例如,g++ -S.了解一下处理器的体系结构和汇编语言,以便从这个输出中学习理解甚至有用的推论.
| 归档时间: |
|
| 查看次数: |
507 次 |
| 最近记录: |