我有使用++運行3秒,在微軟的編譯器運行在30秒,我不明白克以下代碼...爲什麼在g ++中編譯的代碼比在微軟編譯器中如此明顯地緊密呢?
struct constraint{
int bitline;
int result;
};
// this vector is filled with about 1 milion items
vector<constraint> constraints;
for (int a = 0; a < constraints.size(); ++a)
{
if (a% 100 == 0) cout << a << " "<<endl;
for (int b = a; b < constraints.size(); ++b)
{
int anded = constraints[a].bitline & constraints[b].bitline;
int ored = constraints[a].bitline | constraints[b].bitline;
// a subset of b
if (anded == constraints[a].bitline && constraints[a].result >= constraints[b].result)
{
// delete a
constraints[a].bitline = 0;
}
if (anded == constraints[b].bitline && constraints[b].result >= constraints[a].result)
{
constraints[b].bitline = 0;
}
}
}
編輯:我不使用optimalization標誌,withing。在windows xp 32位上運行...嘗試它沒有「調試線路」 - 沒有重大變化。
GCC可能並不總是比MSVC快10倍。 –
你能發佈完整的代碼嗎? –
區別可能是使用的優化,或者出於某種原因,cout在msvc中可能會很慢。你可以發佈你的命令行,也可以在沒有'cout << ...'行的情況下重試嗎? –