为什么这个静态数组会在发布版本中导致一个非常长的“生成代码”步骤?

时间:2010-01-17 16:40:33

标签: c++ visual-studio-2008 build-process

我最近在我的一个类中添加了一个静态查找数组,例如:

// MyClass.h
class MyClass
{
    static MyClass const s_fromIndex[1500];
public:
    MyClass(size_t arg1, size_t arg2);

    static MyClass fromIndex(size_t index) { return s_fromIndex[index]; }

}

// MyClass.cpp
MyClass const MyClass::s_fromIndex[1500] = 
{
    MyClass(0, 1), MyClass(0, 2), MyClass(0, 3), MyClass(0, 4),
    ...
};

数组的原因是从索引到两个参数的计算非常昂贵(尽管在示例代码中看起来很漂亮)。由于索引限制为1500,我想我会从查找数组中返回对象。

该类驻留在静态库项目中。很快,我注意到每当我在可执行项目中使用MyClass时,构建过程中的“生成代码”步骤会突然花费很长时间(2-3分钟)。以前这一步很快就会完成。调试版本仍然很快完成。

当我取出静态数组时,所有内容都会再次顺利构建。

奇怪的是,我似乎无法仅使用上面的代码在一个新的干净项目中重现问题,因此可能还会有其他一些事情发生。

您是否知道为什么静态数组会在发布版本中导致极长的“生成代码”步骤?无论如何,编译器/链接器在此步骤中做了什么?

编辑:我目前通过使用静态向量并在运行时填充它来解决此问题。我仍然很好奇可能会导致极长的生成代码步骤。此外,我想补充一点,实际上MyClass比我发布的示例代码更大。具体来说,它有一个(也是唯一一个)私人成员。该成员的类型是模板类。也许这与它有关。

1 个答案:

答案 0 :(得分:0)

您是否在不同版本中启用了不同的优化?

我也注意到这一点,快速和快速脏应用程序,具有非常大的静态数组初始化&发布版本 - 快速构建的调试版本,发布将需要FOREVER。我最终放弃并在运行时和编译时加载数据,并且从未确定导致问题的特定优化设置。