c++ - msvc2013无法编译包含巨大查找表的头文件

标签 c++ visual-studio-2013 lookup-tables

我有一个只有 header 的库,其中包含一个巨大的查找表(超过一百万个 double )。查找表定义:

#ifndef EGM96LUT_h__
#define EGM96LUT_h__

#include <vector>

namespace coord
{
    const std::vector<std::vector<double>> EGM96LUT = {{...},{...},...};
}

#endif

当我尝试使用 visual studio 编译包含此 header 的内容时,它会挂起很长时间然后崩溃。我可以在大约 10 秒内在 gcc 中构建相同的代码。

我知道如果我在 .cpp 文件中静态编译 LUT 可能会起作用,但我真的不想破坏库的仅 header 特性。我也知道我可以将数据存储在某种类型的 .dat 文件中并从磁盘读取它,但我也试图避免这种情况并保持所有内容的编译。

是否有可能有助于缩短构建时间但不使用 .cpp 的解决方法?

最佳答案

你总是可以打破它。一次生成一个内部 vector (使用您最喜欢的脚本语言生成此长文本),然后将它们存储在外部 vector 中。

因为根据您的描述,它是崩溃的解析器,这将解决它,因为它会减少咀嚼。

将其更改为

也可能有效
const std::vector<const std::vector<double> >

因为这确实是二维数组存储的内容。

关于c++ - msvc2013无法编译包含巨大查找表的头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34643026/

相关文章:

c++ - Mini Filter 驱动程序与 Windows 服务的通信

c++ - 在 C++ 中返回 float 组

c++ - 在递归函数中释放内存时堆损坏

java - 计算每手扑克起手牌的唯一索引

c++ - QDom 递归删除评论

c++ - mysql 结果集始终为空

colors - Visual Studio 2013 不突出显示 typescript 文件

c++ - 如何消除模板代码中的 "divide by 0"错误

c - 我是否应该认为声明所有 C 静态函数是一个好习惯?

c++ - 如何在OpenCV中使用Matlab的512元素查找表数组?