【问题标题】:In Visual Studio, How to prevent my useful function being optimized by the compiler?在 Visual Studio 中,如何防止编译器优化我的有用功能?
【发布时间】:2018-06-21 05:59:01
【问题描述】:

我做了一个模板字符串操作类,可以操作std::string和MFC CString。 它在调试版本上运行良好。 它确实适用于发布版本。 通过调查,我发现至少优化了一项有用的功能。 checkChars 经过优化,应该在拆分中调用。 (没有调用 checkChars。)

static bool checkChars(const TCHARTYPE& c, const TCHARTYPE* chrs)
        {
            for ( ;*chrs ;chrs++)
            {
                if (c == *chrs)
                {
                    return true;
                }
            }
            return false;
        }
void split(const TSTRING& s, vector<TSTRING>& v, const TCHARTYPE* separator, bool bKeepEmptyParts = false)
{
...
//here at() is called, but checkChars isn't
if (checkChars(at(s, i), separator))
...
}

VS 优化是

最大化速度 (/O2)

。我发现有用

自定义

可以防止优化我的有用功能。 但是我想知道为什么,又不想更改项目设置,我可以只修改我的代码使其工作吗?

编辑:

很久之后,我意识到真正的问题不是优化,而是“at()”函数没有返回预期的字符引用。这里的 TSTRING 是 CString MFC,它不返回 TCHAR 引用。编译器发现这行不通,所以“优化”了它。

【问题讨论】:

    标签: compiler-optimization


    【解决方案1】:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    • 1970-01-01
    • 2019-07-26
    • 1970-01-01
    相关资源
    最近更新 更多