使用static关键字为全局字符串变量添加前缀会减少整个程序的大小吗?

时间:2013-03-23 10:45:55

标签: c++

我正在编写一个c ++应用程序,它可以进行大量的字符串解析。我将字符串定义保存在普通的头文件中(没有相应的C ++文件)。

头文件使用#ifdef XXX来确保它只由编译器处理一次。

我可以选择声明字符串

const TCHAR m_szRoot[] = _T("root");

static const TCHAR m_szRoot[] = _T("root");

Theses变量在应用程序中多次使用。

建议的声明是什么?从应用程序大小的角度来看哪个声明更好。

2 个答案:

答案 0 :(得分:3)

如果从多个翻译单元中包含的标题中创建相同的static,则每个结果文件都将获得其自己的对象副本,这可能会增加应用程序的占用空间。此外,对象将驻留在不同的地址,可能使相等比较更慢。链接时优化可以组合相同的常量,但这是可选的。

避免重复的某种方法是将常量放在单独的翻译单元(即CPP文件)中,并在头文件中使用extern

部首:

extern const TCHAR m_szRoot[];

constants.cpp:

const TCHAR m_szRoot[] = _T("root");

这将确保每个常量的单一定义。

答案 1 :(得分:2)

忘记微观优化!!

如果要将变量的范围限制为单个翻译单元,请使用static static为您提供内部联系 这应该是声明它static而不是优化的标准。编译器将执行任何需要完成的优化。