昨天我问了一个问题 here 试图了解使用extern数组指定的大型查找表的任何潜在问题。这些表都用于一组非参数模型,这些模型必须内置到DLL中供我们的客户使用,其中DLL应该以1000Hz左右的速度进行计算。
现在在我的项目中,各种各样的extern数组查找表总共存储了大约66.2M的浮点数,所以总共大约265MB的数据。包含所有这些表的项目将编译正常但无法完成链接。但是,当我在extern数组中存储的数据少于180MB时,项目编译并链接正常。
自昨天发布以来,我收集了大量证据表明我的项目限制了我可以存储在extern数组中的数据量。在一组extern数组/变量中可以存储多少数据是否存在实际限制?链接器中是否存在可能因外部数组中包含过多数据而中断的错误?如果有一些限制,是否有办法将限制提高到更高的水平或以某种方式解决这个问题?
请注意,我的项目是Win32项目。
修改
请注意,有关此问题的详细信息(如出现的错误)位于帖子开头的链接中。以下是VS 2010中弹出窗口和消息的一些屏幕截图:
答案 0 :(得分:1)
对于这个大的数组,你应该使用动态内存而不是数组。在您的情况下,数组在堆栈或数据段上分配。事实上,任何大于100KB的东西都不应该被分配为数组。它可能会造成各种麻烦。即使你确实让程序运行,也可能会有一些严重的性能损失。