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

我正在使用C ++编写Microsoft Excel的.XLL插件,在XLW库的帮助下。 我的操作系统是Windows 7 64位版本,32 GB RAM; 但我的Excel是Excel 2010,32位版本。

使用GlobalMemoryStatusEx检查,它显示XLL中的代码只能看到大约1200 MB的可用虚拟内存(来自struct _MEMORYSTATUSEX中的 ullAvailVirtual ),尽pipe可用的物理内存( ullAvailPhys )大约为23 GB。

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

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

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

XLL实际上只是一个重命名的DLL。 如果你有一个32位的Excel,那么整个Excel进程就有一个32位的虚拟地址空间(而Windows保留了一半的OS)。 所以你的程序(包括XLL和Excel本身)总共只限于2G。

您的select是:

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

后面的选项显然要复杂得多,在进程之间复制数据不会那么快捷 – 但这一个选项。