在我的工作中,我们有各种各样的大表存储用于一组多维非参数模型的数据。每个表是一个float
阵列,其大小通常为200,000至5,000,000个元素。限制使用代码库大查询表在Visual Studio 2010
今天,我要对常琐碎的更新这个代码库,更新了一组查找表的,当我发现编译和项目的链接是导致微软增量链接已停止工作,东西我以前没见过。请注意,我正在更新的表格正在从约290,000个元素的大小增长到每个元素近10,000,000个元素。
我搜查,发现方法的人建议,以解决与增量链接弹出的问题,但没有固定它。我甚至把这个项目整合到了VS 2012中,并且让它失败了。
我知道我的项目之前编译,所以我删除了更新,并把它恢复到原来的状态。这个状态正确地编译和链接,因为它一直有。然后,我将其中一个旧表与其中一个新表交换,并且正确编译和链接。但是,一旦我为更新后的表格进行了另一次交换,它在编译后与链接有同样的问题。
如前所述,新的表我都添加了具有约10,000,000元每比他们要更新的旧表显著较大。链接器正努力与这些大型表一起工作是否可行?如果是这样,为什么呢?
新表编译细跟的代码库,它只是连接步骤失败。如果表的大小是一个问题,是否有任何建议来处理这个问题,仍然可以保持名义建模和查找表的方法?我承认,从尺寸的角度来看,使用参数化模型会更好,因为它会压缩数据,但我的团队不想在这个时候离开他们的传统方法。
注意每个表的代码是沿着这些路线的东西:
头文件
//
// dataset1.hpp
//
#ifndef dataset1_hpp_
#define dataset1_hpp_
namespace set1 {
extern const int tableSize;
extern const float table[];
}
#endif
源文件
//
// dataset1.cpp
//
namespace set1 {
extern const int tableSize = 10000000;
extern const float table[tableSize] = {
/*... Lots of Numbers ... */
};
}
增量链接功能不是100%可靠的。如果你得到这个错误,那么首先要做的就是手动删除..ilk文件,这样它就从一个新的文件开始。如果错误立即重复,那么你已经达到了内部限制。最有可能的情况下,我会说,你必须禁用它或考虑开始使用文件。 –
@HansPassant是的,你的第一对夫妇的评论是我在网上阅读和尝试。然而,即使做你提到的(和其他事情),可悲的是不允许它与整个数据集进行编译。通过禁用或考虑使用文件是什么意思? – spektr
你可以将数据移动到文件而不是硬编码吗? –