Nap*_*out 13 c++ enums visual-studio-2015
我有一个带枚举的dll(和许多其他东西)
enum class KIT_API VoxelTypes : uint16_t
{
... about a hundred entries ...
ModellingClay_00 = 65406,
... more entries ...
ModellingClay_128,
COUNT
};
Run Code Online (Sandbox Code Playgroud)
元素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},
};
Run Code Online (Sandbox Code Playgroud)
新的:
static Elements* whoppingBigTable[64];
for(int i = 0; i < 64; i++)
{
whoppingBigTable = new Elements[1024];
}
AddElement({Item1, 1, 1});
AddElement({Item2, 2, 2});
Run Code Online (Sandbox Code Playgroud)
还必须添加一些数学函数来访问数组元素。我认为这是最快的方法。它包含我的体素的定义,因此我需要经常访问它。(我想我还可以为每个体素属性定义单独的数组,并且这些数组可能足够小以进行编译。这可能比将所有属性放入一个巨型数组中更快)
const Element& GetWhoppingElement(int index)
{
int majorIndex = index / 1024;
int minorIndex = index % 1024;
return whoppingBigTable[majorIndex][minorIndex];
}
Run Code Online (Sandbox Code Playgroud)