首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Visual C++ enum需要很长时间来编译

Visual C++ enum需要很长时间来编译
EN

Stack Overflow用户
提问于 2017-09-22 07:08:17
回答 1查看 266关注 0票数 13

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

代码语言:javascript
复制
enum class KIT_API VoxelTypes : uint16_t
{
  ... about a hundred entries ...
    ModellingClay_00 = 65406,
... more entries ...
    ModellingClay_128,
    COUNT
};

元素计数的值为65535。在“生成代码”阶段,我已经编译了45分钟。如果我将ModellingClay_00设置为10000,它将在5-10分钟内编译。15000似乎花费了相当长的时间,但最终还是进行了编译。

是否有任何理由,一个枚举应该花费更长的时间来编译简单地改变它所包含的值?

我很肯定,我与Visual的某些内在巫毒相冲突,这是为我个人的折磨而预留的。有人能指出我做过的一些明显的事情,甚至听说过这件事吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-23 05:14:10

安格的分析是正确的。

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

我的工作是创建一个动态数组数组,而不是使用一个庞大的数组初始化表。

旧:

代码语言:javascript
复制
static Elements whoppingBigTable[] = {
    {Item1, 1, 1},
    {Item2, 2, 2},
};

新的:

代码语言:javascript
复制
static Elements* whoppingBigTable[64];
for(int i = 0; i < 64; i++)
{
    whoppingBigTable = new Elements[1024];
}
AddElement({Item1, 1, 1});
AddElement({Item2, 2, 2});

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

代码语言:javascript
复制
const Element& GetWhoppingElement(int index)
{
    int majorIndex = index / 1024;
    int minorIndex = index % 1024;
    return whoppingBigTable[majorIndex][minorIndex];
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46358799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档