Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
内联函数,而不是带有常量的简单宏 一般在C++中,你想使用常量而不是用“代码”定义常数,因为定义了类型检查,这是个好东西。 #define MYCONST 10; // NO const int MYCONST = 10; // OK._C++_Performance_Macros_Inline - Fatal编程技术网

内联函数,而不是带有常量的简单宏 一般在C++中,你想使用常量而不是用“代码”定义常数,因为定义了类型检查,这是个好东西。 #define MYCONST 10; // NO const int MYCONST = 10; // OK.

内联函数,而不是带有常量的简单宏 一般在C++中,你想使用常量而不是用“代码”定义常数,因为定义了类型检查,这是个好东西。 #define MYCONST 10; // NO const int MYCONST = 10; // OK.,c++,performance,macros,inline,C++,Performance,Macros,Inline,这很好,但是假设我想提高我的应用程序的性能;如果我仍然要读取该常数,我可能会从L1到L3的任何缓存级别读取它(我希望是正确的),这将引入慢度 将该常量定义为下面这样的简单内联函数会更好吗 inline int MYCONST() { return 10; } 当我应该期待一些改进时,我说的对吗 根据for integer,它似乎取决于编译器和我使用的类型。我认为定义常量是更好的做法,但我也怀疑许多编译器无法正确处理诸如 char myBuffer[MYCO

这很好,但是假设我想提高我的应用程序的性能;如果我仍然要读取该常数,我可能会从L1到L3的任何缓存级别读取它(我希望是正确的),这将引入慢度

将该常量定义为下面这样的简单内联函数会更好吗

    inline int MYCONST()
    {
       return 10;
    }
当我应该期待一些改进时,我说的对吗


根据for integer,它似乎取决于编译器和我使用的类型。

我认为定义
常量是更好的做法,但我也怀疑许多编译器无法正确处理诸如

char myBuffer[MYCONST()];

不发出错误消息。

否和否:当您定义以下内容时

const int MYCONST = 10;
不会从“任何缓存级别”读取该值,但编译器(至少是过去20年中的任何编译器构建)将发出与使用宏(或等效的文本)完全相同的代码,即它将直接放在机器代码中

因此,您的第二个建议(使用内联函数)不仅对性能没有任何好处,而且会阻止大量使用常量(如
char my_array[MYCONST]
),更不用说代码的可读性差、浪费空间等了


只要遵循主C++信条并使用常量,这没什么不对的…………/P。为什么不直接执行和测量?您可能根本不会注意到差异,因为编译器太聪明了。顺便说一句,保留宏的所有大写字母。有了所有这些,编译器可能会做出正确的决定,如何从使用常量的任何计算中获得最大性能。“从L1到L3的任何缓存级别读取它”—当编译器优化时,这些常量都会放在代码段中(链接的答案解释为“烘焙”)。没有额外的读取。好吧,我明白了,不涉及缓存。谢谢Hanks Martin,我明白了。只是我在考虑常量之前从未有过如此低的级别。我需要一些专家意见。还有一个细节,它是否适用于所有数据类型?双精度、字符、字符串??它适用于所有基本数据类型(int、byte、double、float等)。对于字符指针(即C字符串),内容(字符)将放在数据段中,指针将被视为常量(同样,这与宏相同或更好)。对于对象,(如

std::string(“Hello World”)
),则
const
方法会更好:在这种情况下,宏的每次使用都会调用构造函数,而const对象的构造函数只调用一次。对常量使用
const
确实没有缺点。。。