【问题标题】:Build hangs with an even modest filesize文件大小适中的构建挂起
【发布时间】:2020-06-25 18:36:50
【问题描述】:

我有一个 C++ 程序,它带有一个存储在头文件中的大向量。

这个向量的大小约为 100 万个浮点数。 (大约 5MB 文件大小)。我无法在 Visual Studio 中构建此程序。构建文件由 cmake 生成。

如果我用一个较小的向量(比如 100)替换这个向量,我的程序在几分钟内就可以构建好。但是即使有 50 万个点,即使放置几个小时,程序也无法构建。

我的问题,我如何让程序用我的 5MB 文件构建。 MS Visual Studio 是否对文件大小或堆大小有任何限制?在 Linux 上,我可以在大约 5 分钟的时间内完成该程序。但是 Visual Studio 没有运气。

有些地方建议使用这个环境变量。

CL = /Zm50

我尝试了各种数字,但没有任何区别。

Visual Studio 没有提供任何细节 - 构建只是卡在大文件上并且无法完成。我希望有 Visual Studio 经验的人可以就可能的构建选项提供一些见解。

【问题讨论】:

  • 听起来您正在使用编译器对数组进行编译时计算。也许不这样做?
  • 不确定,抱歉!
  • 您能否将其更改为使用static const float data[] = {...}; std::vector<float> bigvec = {std::begin(data), std::end(data)}; 之类的内容,将该代码放入 .cpp 文件(而不是包含在多个文件中的 .h)中?
  • 所以向量实际上有一个 5MB(大约)的初始化列表?
  • 值得将您正在做的事情的一个简短版本与“这不足以导致问题”警告一起放入问题中。这增加了很多清晰的问题,即使它是不可重现的。

标签: c++ visual-studio visual-studio-2019


【解决方案1】:

由于您已在 cmets 中指出您正在使用带有初始化程序的 std::vector<float>,您可以将其替换为静态数组:

static const float data[] = {...};
std::vector<float> bigvec {std::begin(data), std::end(data)};

您在 .cpp 文件中声明一次。

静态数组可以在编译时完全构建,不需要任何代码生成。在源文件中定义它(而不是可以包含多次的标头)将避免链接器处理大量重复的代码和/或数据(以及可能违反一个定义规则)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-26
    • 2010-12-31
    • 1970-01-01
    相关资源
    最近更新 更多