繁体   English   中英

内联 constexpr function 比较“int”和“int”与“const char*”和“const char*”在性能上是否存在理论上的差异?

[英]Is there any theoretical difference in performance in an inline constexpr function that compares an `int` & `int` VS a `const char* & `const char*`?

启用优化时,比较int & int VS a const char* & const char*inline constexpr function 的性能是否存在理论上的差异?

示例 1( int等于int

struct some_struct {
    int m_type;
    ...
    inline constexpr
    void somefunc() {
        if (m_type == 0) {
            ...
        } else if (m_type == 1) {
            ...
        }
    }
};

示例 2( const char*等于const char*

struct some_struct {
    const char* m_type;
    ...
    inline constexpr
    void somefunc() {
        if (strcmp(m_type, "some_str_1")) {
            ...
        } else if (strcmp(m_type, "some_str_2")) {
            ...
        }
    }
};

编辑:

正如@RichardCritten 指出的那样, strcmp不是constexpr function。 虽然在我的实际代码中,我有一个自定义strcmp function,它是一个constexpr function。

Consexpr 函数仅在需要时在编译时计算,我的意思是在常量表达式中。

所以在常量表达式中,运行时的性能没有差异(编译时间可能不同)。

在非常量表达式中,函数在运行时与任何常规函数一样计算(使用 as-if 规则,优化器可能会优化并返回编译时计算的结果,在这方面constexpr可能是编译器的提示)。

这取决于。

一切都可以在编译时完成吗? 不必要。 如果是,那么运行时当然不会有任何区别。

对于运行时? 在某些机器上,根据架构, intchar*的比较可能是相同的。

这可以通过查看汇编代码来找到。 尽管如此,一些 CPU 内部程序也会产生影响。

但是,将整数类型与 C 风格的字符串进行比较很少有相同的性能,因为对于一个字符串,需要比较许多字节。 在这里,现代 CPU 架构和汇编指令也可能有所帮助。

我对您的问题(似乎是xy 问题)的回答是:

很可能存在差异,但这取决于。 . .

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM