Excel XLL 插件可以有多少内存?

How many memory an Excel XLL plugin can have?

XLW library 的帮助下,我正在使用 C++ 为 Microsoft Excel 编写一个 .XLL 插件。我的操作系统是windows7 64位版本,内存32GB;但我的 Excel 是 Excel 2010,32 位版本。

正在检查 GlobalMemoryStatusEx, it shows that the code in XLL can only see about 1200 MB virtual memory available (from ullAvailVirtual in struct _MEMORYSTATUSEX),但可用的物理内存 (ullAvailPhys) 约为 23 GB。

由于我的代码需要大量内存(每个计算线程大约 100MB),在发出 12 个线程后它遇到了错误的分配错误。

有没有办法增加可用内存?

  1. 这是 Excel XLL 插件的限制吗?在控制台应用程序中,GlobalMemoryStatusEx 报告大约有 2034 MB 可用虚拟内存。
  2. 这是XLW library的限制吗?
  3. 这是32-bit Excel的限制吗?

XLL实际上只是重命名的DLL。如果你有一个 32 位的 Excel,那么整个 Excel 进程就有一个 32 位的虚拟地址 space 可以居住(并且 Windows 保留其中的一半用于OS)。因此,您的进程(XLL 和 Excel 本身)的总容量限制为 2G。

您的选择是:

  1. 切换到 64 位 Excel(这意味着您的 XLL 需要是 64 位的)
  2. 让 XLL 保持 32 位,并使其启动一个单独的(可能是 64 位)进程,并在其中进行处理。

后一种选择显然要复杂得多,并且在进程之间复制数据不会那么快 - 但它一个选项。