c++ - Visual Studio C++ 枚举需要很长时间才能编译

标签 c++ visual-studio-2015 enums

我有一个带有枚举(和许多其他东西)的 dll

enum class KIT_API VoxelTypes : uint16_t
{
  ... about a hundred entries ...
    ModellingClay_00 = 65406,
... more entries ...
    ModellingClay_128,
    COUNT
};

元素 COUNT 的值为 65535。 在“生成代码”阶段,我已经编译了超过 45 分钟。如果我将 ModellingClay_00 设置为 10000,它会在大约 5-10 分钟内编译。 15000 似乎需要更长的时间,但最终还是编译成功了。

是否有任何理由仅通过更改枚举包含的值就应该花费更长的时间来编译?

我很确定我已经与 Visual Studio 的一些内部巫术发生了冲突,为我的个人折磨而搁置。谁能指出我做过的明显的事情,甚至以前听说过?

最佳答案

Angew 的分析是正确的。

有一个 VoxelTypes::COUNT 元素的静态数组。每个元素为 88 个字节,总共 5,767,168 (5.5 Mb)。

我的解决方法是创建一个动态数组数组,而不是使用大量数组初始值设定项表。

旧:

static Elements whoppingBigTable[] = {
    {Item1, 1, 1},
    {Item2, 2, 2},
};

新:

static Elements* whoppingBigTable[64];
for(int i = 0; i < 64; i++)
{
    whoppingBigTable = new Elements[1024];
}
AddElement({Item1, 1, 1});
AddElement({Item2, 2, 2});

还必须添加一些数学函数来访问数组元素。我认为这是最快的方法。它包含我的体素的定义,所以我需要经常访问它。 (我想我也可以为每个体素属性定义单独的数组,这些数组可能小到足以编译。这可能比将所有属性放入一个巨大的数组中更快)

const Element& GetWhoppingElement(int index)
{
    int majorIndex = index / 1024;
    int minorIndex = index % 1024;
    return whoppingBigTable[majorIndex][minorIndex];
}

关于c++ - Visual Studio C++ 枚举需要很长时间才能编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46358799/

相关文章:

typescript - 除非在每个文件中引用,否则无法在 TS 文件中找到名称 '$'

c++ - 来自自定义类的对象 vector

c++ - 我怎样才能 'reuse' cocos2d::action?

c++ - thread_local C++11,VS2015 中的错误 C2492

enums - 如何在 Chapel 中声明 ENUM?

c# - 在 C# 的派生类中重写枚举

c++ - 从成员函数返回枚举

c++ - 如何并行化这个 for 循环以快速将 YUV422 转换为 RGB888?

c++ - 如何实现无符号 33 位整数类型

mysql - Web API 没有得到正确的结果