我有一个仅包含头文件的库,其中包含一个庞大的查找表(超过一百万的双打)。查找表定义如下:
#ifndef EGM96LUT_h__
#define EGM96LUT_h__
#include <vector>
namespace coord
{
const std::vector<std::vector<double>> EGM96LUT = {{...},{...},...};
}
#endif
当我尝试使用visual studio编译包含此标题的内容时,它会挂起很长一段时间然后崩溃。我可以在大约10秒内在gcc中构建相同的代码。
我知道如果我在.cpp文件中静态编译LUT,这可能会有效,但我真的不想打破库的标题。我也知道我可以将数据存储在某种类型的.dat文件中并从磁盘中读取它,但我也试图避免这种情况并保持所有编译。
是否有一种解决方法可能有助于构建时间但不使用.cpp?
答案 0 :(得分:1)
你总是可以分手。一次生成一个内部向量(使用您喜欢的脚本语言生成此长文本),然后将它们存储在外部向量中。
因为根据你的描述,解析器正在崩溃,这将解决它,因为它可以减少咀嚼。
也可以将其更改为
const std::vector<const std::vector<double> >
因为这确实是二维数组存储的内容。
答案 1 :(得分:0)
我最初使用向量,因此LUT将被堆分配,因为我担心可能会溢出堆栈。将向量重构为const数组解决了问题,并且没有溢出。
const double EGM96LUT[721][1441] = {{...},{...},...};