我想看看gcc
的优化选项对程序有什么影响,代码是这样的:
#include <iostream>
class A {
public:
A() {
a[0] = 10;
a[1] = 20;
empty;
}
int a[5];
bool empty;
};
int main(void){
A a;
std::cout << a.empty << std::endl;
return 0;
}
由于 empty
成员没有在构造函数中赋值,我希望它是一个随机值。编译运行:
# g++ -g test.cpp
# ./a.out
254
# ./a.out
254
# ./a.out
253
# ./a.out
253
结果如我所料。然后我使用 -O2
编译选项:
# g++ -g -O2 test.cpp
# ./a.out
0
# ./a.out
0
# ./a.out
0
# ./a.out
0
似乎总是 0
。我使用 gdb
来调试程序:
14 int main(void){
(gdb) n
17 std::cout << a.empty << std::endl;
(gdb) p a
$1 = {
a = {[0] = 10, [1] = 20, [2] = <optimized out>, [3] = <optimized out>, [4] = <optimized out>},
empty = <optimized out>
}
我只是想确定既然 empty
被优化掉了
,它的值也应该是随机的,对吗?
最佳答案
我理解您为什么认为它应该是随机的,但您要求的是具有具有某些特征的垃圾值。换句话说:您希望定义未定义的行为。对不起,但你不能要求那个!当您对世界上所有计算机进行平均时,它是随机的。不是在你的小笔记本电脑上的特定小程序上。这与为什么 random errors 的原因相同。在一台计算机上不容易被发现,因为它们在多台计算机上的多次使用中是随机的。
关于c++ - "optimized out"值是否应该是随机的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43199536/