如果从未读取变量,则显然已将其优化。但是,对该变量的唯一存储操作是另一个变量的唯一读操作的结果。因此,第二个变量也应该被优化掉。为什么没有这样做?
int main() {
timeval a,b,c;
// First and only logical use of a
gettimeofday(&a,NULL);
// Junk function
foo();
// First and only logical use of b
gettimeofday(&b,NULL);
// This gets optimized out as c is never read from.
c.tv_sec = a.tv_sec - b.tv_sec;
//std::cout << c;
}
Aseembly(gcc 4.8.2 with -O3):
subq $40, %rsp
xorl %esi, %esi
movq %rsp, %rdi
call gettimeofday
call foo()
leaq 16(%rsp), %rdi
xorl %esi, %esi
call gettimeofday
xorl %eax, %eax
addq $40, %rsp
ret
subq $8, %rsp
编辑:使用rand()
的结果相同。
答案 0 :(得分:3)
没有商店运营! 是 2次调用gettimeofday
,是的,但这是可见效果。而可见效果正是可能无法优化的事物。