我正在使用C ++在XLW library的帮助下为Microsoft Excel编写.XLL插件。我的操作系统是Windows 7 64位版本,带有32 GB RAM;但我的Excel是Excel 2010,32位版本。
使用GlobalMemoryStatusEx进行检查,它显示XLL中的代码只能看到大约1200 MB可用虚拟内存(来自struct _MEMORYSTATUSEX中的ullAvailVirtual
),尽管可用的物理内存({{ 1}})约为23 GB。
由于我的代码需要相当多的内存(每个计算线程约100MB),在发出12个线程后会遇到错误的分配错误。
有没有办法增加可用内存?
ullAvailPhys
插件的限制吗?在控制台应用程序中,XLL
报告可用的大约2034 MB虚拟内存。GlobalMemoryStatusEx
的限制吗?XLW library
的限制吗? 答案 0 :(得分:1)
XLL实际上只是一个重命名的DLL。如果你有一个32位的Excel,那么整个Excel进程都有一个32位的虚拟地址空间(Windows保留了OS的一半)。因此,您的流程(XLL和Excel本身)仅限于2G。
您的选择是:
后一个选项显然要复杂得多,在进程之间复制数据不会那么快 - 但 是一个选项。