使用~7000个元素初始化容器时编译速度慢

时间:2013-12-06 20:39:17

标签: c++ visual-studio-2013

我在源文件中有以下内容:

const std::vector<std::vector<UChar32>> table = {
    { 0x1234, 0xabcd },
    { 0x5678, 0xef01, 0xfe21},
    // ~7000 more elements omitted
};

使用Visual Studio 2013编译时间非常慢(我在中止之前在i7-2600上等了30分钟)。有什么方法可以加快速度吗?

编辑:我应该补充一点,这个源文件只包含这个定义,以及必要的包含。 UChar32只是std :: int32_t的typedef。

3 个答案:

答案 0 :(得分:0)

如果数据是常量,由编译器初始化而不是程序改变,那么使用数组会更好。

此外,数据应位于单独的翻译单元中,因此不会经常编译。

这是嵌入式系统中用于编译位图字体或语言转换表等固定数据的常用技术。

声明数组时,声明它没有大小,并声明为“static const”,以便在使用时不会将其压入堆栈。

答案 1 :(得分:0)

我对const vector&lt;的嵌套初始化列表进行了测试。矢量&lt; int&gt; &GT;约10k(总)元素和我一致得到:

  • 使用默认VC12编译器编译时间为0.6s
  • 使用VC13 CTP编译器
  • 0.55s

在Win8.1 x64上运行@ 2.4GHz i7和SSD。

所以我认为问题可能出在其他地方。

答案 2 :(得分:0)

您是在多个地方使用该表吗?可能是编译器将此const视为一个宏,并在遇到其他地方时将其扩展到其他地方吗?

我怀疑是这样,但这是可能的......