我会问一个关于编译器的问题,特别是他们如何工作。我相信编译器总是会编译成相同的机器代码,用于编写不同语法但代码相同的代码。这是真的?功能相似的代码是否被编译为相同的结果,而不管语法上的差异?有效的编译器每次都会编译完全相同的结果吗?
例如:
int number = 2;
将编译为同样的事情:
int number;
number = 2;
或
while True:
将是相同的(我在这里使用python作为例子):
while 1:
我对.net编译器和解释器特别感兴趣。 JIT编译器每次“及时”编译相同的东西吗?像Python解释器这样的解释器每次都“解释”代码代码完全一样吗?
谢谢!
两个for循环怎么样? – 2012-03-21 00:47:00
你是什么意思,“做同样的事情?”最后两个循环实际上做了不同的事情,因为即使它们循环五次,循环中的每个循环的值也都不相同。 – templatetypedef 2012-03-21 00:47:45
在某些情况下,'for(int i = 0; i <5; i ++)'可能会被编译成与'for(int i = 1; i <= 5; i ++)'相同的目标代码,但是一般情况下你*不希望它,因为'我'会有不同的值范围。如果在循环内部使用'i',那么这种差异就很重要。 – 2012-03-21 00:49:14