我正在使用模拟处理器的 pin 工具并遇到一个非常奇怪的问题。在下面的代码片段中,Router::Evaluate() 被多次重复调用。在它被调用数百万次后,会间歇性地发生奇怪的行为,其中“_cycles!= 0”在第一个 IF 语句中被评估为真,而在紧随其后的 IF 语句中被评估为假,落入 ELSE 块。
void Router::Evaluate( )
{
//---------debug print code---------
if (_cycles != 0) {
cout << "not a zero" << endl;
if (_cycles != 0) cout << "---not a zero" << endl;
else cout << "---zero" << endl;
}
//----------------------------------
_cycles += _speedup;
while ( _cycles >= 1.0 ) {
_Step();
_cycles -= 1.0;
}
}
//class definition
class Router : public TimedModule {
Protected:
double _speedup; //initialized to 1.0
double _cycles; //initialized to 0.0
...
}
下面是代码的输出,其中“not a zero”后跟“---zero”不时被打印出来,看似随机。
not a zero
---zero
(...some other output...)
not a zero
---zero
(...some other output...)
这怎么可能发生?这不是一个多线程程序,所以同步不是问题。该程序使用 gcc4.2.4 编译并在 32 位 CentOS 上执行。有人有线索吗?谢谢。
- 添加 - -
我也应该提到这一点。我确实尝试每次打印_cycles的值,它总是0.0,这应该是不可能的......我还使用了以下g ++选项:“-MM -MG -march=i686 -g -ggdb -g1 -finline -功能 -O3 -fPIC"