Optimization 威尔g++;做正确的事吗;?
在下面的代码段中,我的目的是从各种可能性中强制输入参数的一些特定值。我使用的是关闭了所有优化的g++版本4.7.2,我的问题是编译器是否遵守了预期的执行顺序Optimization 威尔g++;做正确的事吗;?,optimization,g++,Optimization,G++,在下面的代码段中,我的目的是从各种可能性中强制输入参数的一些特定值。我使用的是关闭了所有优化的g++版本4.7.2,我的问题是编译器是否遵守了预期的执行顺序 int MP3Filter::checkBitrate(int nBitrate) { // ########################################## // this assumes a specific order of execution // ?? will the compiler
int
MP3Filter::checkBitrate(int nBitrate)
{
// ##########################################
// this assumes a specific order of execution
// ?? will the compiler mess with this ??
if (nBitrate <= 32) return 32;
else if (nBitrate <= 40) return 40;
else if (nBitrate <= 48) return 48;
else if (nBitrate <= 56) return 56;
else if (nBitrate <= 64) return 64;
else if (nBitrate <= 80) return 80;
else if (nBitrate <= 96) return 96;
else if (nBitrate <= 112) return 112;
else if (nBitrate <= 128) return 128;
else if (nBitrate <= 160) return 160;
else if (nBitrate <= 192) return 192;
else if (nBitrate <= 224) return 224;
else if (nBitrate <= 256) return 256;
return 320;
}
int
MP3Filter::校验比特率(int-nBitrate)
{
// ##########################################
//这假定有一个特定的执行顺序
//?编译器会弄乱这个吗??
如果(nBitrate我想你可以告诉g++用-O0标志关闭所有优化。你关心优化器吗?这段代码没有什么让我觉得它无法正确编译。我想你可以告诉g++用-O0标志关闭所有优化。你关心优化器吗?什么都不关心但是,这段代码让我觉得它无法正确编译。优化应该与这段代码无关。编译器需要生成与语言标准要求的行为一致的代码,在这种情况下,函数可以为任何特定对象返回的值没有灵活性ar参数值
编译器可以生成它喜欢的任何代码,只要函数返回所需的结果。如果您只关心从函数中获得正确的结果,那么语言标准已经涵盖了这一点。要么g++做得对,要么g++有错误。(我不知道这方面有任何g++错误,如果有这样的错误,我会感到惊讶。)
如果您关心的不是函数返回正确的结果(例如,特定的CPU指令序列),那么(a)我想知道您为什么关心,以及(b)C++不是一种允许你强加这种约束的语言。如果指令序列对你很重要,你可以考虑使用汇编语言。
您到底关心什么?优化应该与此代码无关。编译器需要生成符合语言标准要求的代码,在这种情况下,您的函数可以为任何特定参数值返回的值没有灵活性
编译器可以生成它喜欢的任何代码,只要函数返回所需的结果。如果您只关心从函数中获得正确的结果,那么语言标准已经涵盖了这一点。要么g++做得对,要么g++有错误。(我不知道这方面有任何g++错误,如果有这样的错误,我会感到惊讶。)
如果您关心的不是函数返回正确的结果(例如,特定的CPU指令序列),那么(a)我想知道您为什么关心,以及(b)C++不是一种允许你强加这种约束的语言。如果指令序列对你很重要,你可以考虑使用汇编语言。
你到底担心什么?你到底希望编译器弄糟什么?你不应该在意G++是否对某些代码重新排序,只要发出的代码符合C标准预测的行为。如果你问“编译器可以测试nBitrate@JonathanWakely吗?虽然如果它想@sehe,哎哟,这是非常刺痛的。标准非常清楚ifif else
的语义:)你到底希望编译器弄糟什么?你不应该在意G++是否对某些代码重新排序,只要发出的代码符合C标准预测的行为“编译器可以测试nBitrate@JonathanWakely吗?虽然如果它想@sehe,哎哟,这是非常刺痛的。标准非常清楚ifif else
的语义:)无论如何,默认情况下优化是关闭的,-O0
只有在其他-O
标志取消其效果后才有用。我使用了太多不同的编译器,默认了太多不同的东西,以至于我明确告诉他们我的愿望。gcc一直都是这样吗?是的,一直都是这样。你必须解释一下它要求优化。无论如何,默认情况下优化是关闭的,-O0
只有在其他-O
标志撤销其效果后才有用。我使用了太多不同的编译器,默认了太多不同的东西,我明确地告诉他们我的愿望。gcc一直都是这样吗?是的,一直都是这样例如,您必须明确要求优化。