静态变量减慢app的启动时间

时间:2014-06-24 08:29:34

标签: c++ c static const

我正在制作一个cpp应用程序。我创建了一个包含许多静态变量的.h文件,比如

namespace MSG {
   static const int MSG_TYPE = 1;
   // many more here like strings, ints, chars.
}

这会减慢发布时间。

我在很多地方都使用过这些变量。

如何在降低更改代码的工作量的同时提高速度呢?

但是,提高绩效是一个优先事项。

1 个答案:

答案 0 :(得分:2)

根本问题(假设这真的是什么 放慢你的速度,这让我感到惊讶)就是你 在每个翻译单元中都有一个变量实例 包括标题。对于int,这可能不是问题, 但如果任何类型有构造函数,它肯定可以 是。通常,除了之外,对于积分常数,你可能 标题中不应包含static。 (并注意如果 对象本身是const,默认情况下它是静态的。)因此,对于 一个字符串,它应该是:

namespace Msg
{
    extern std::string const someMessage;
};

然后在源文件中:

std::string const Msg::someMessage( "whatever" );

(源文件当然应包括标题。)

请注意,即使使用积分常数,也必须小心; 如果使用不会导致rvalue立即左值 转换,您将需要一个实际的数据声明。在每一个 以这种方式使用它的文件,因为每个都有一个实例 文件。

这里可能更好的解决方案是使用类,而不是 而不是命名空间:

class Msg
{
public:
    static int const msgType = 1;
    static std::string const someMessage;
    //  ...
};

这确保只有一个实际实例,但仍然如此 允许积分常数作为整数常量 表达式。 (这里也需要一个单一的定义 某处的源文件。)

相关问题