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

时间:2017-09-22 07:08:17

标签: 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。 我已经在#34; Generating Code"中编译了这个超过45分钟的时间。阶段。如果我将ModellingClay_00设置为10000,它将在大约5-10分钟内编译。 15000似乎需要更长的时间,但最终会编译。

是否有任何理由说enum应该花费更长的时间来编译,只需更改它包含的值?

我很确定我与Visual Studio的一些内心巫术相冲突,因为我的个人折磨。任何人都可以指出我已经完成的事情,或者甚至在此之前听说过吗?

1 个答案:

答案 0 :(得分:4)

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];
}