Я использую C ++ для написания плагина .XLL для Microsoft Excel, с помощью Библиотека XLW. Моя операционная система Windows 7 64-разрядная версия, с 32 ГБ ОЗУ; но мой Excel это Excel 2010, 32-битная версия.
Проверка с GlobalMemoryStatusEx, это показывает, что код в XLL может видеть только около 1200 МБ доступной виртуальной памяти (из ullAvailVirtual
в struct _MEMORYSTATUSEX), хотя физическая память доступна (ullAvailPhys
) составляет около 23 ГБ.
Поскольку моему коду требуется довольно много памяти (около 100 МБ на каждый вычислительный поток), после выдачи 12 потоков он сталкивается с ошибкой неправильного размещения.
Есть ли способ увеличить объем доступной памяти?
XLL
плагин? В консольном приложении GlobalMemoryStatusEx
сообщает около 2034 МБ виртуальной памяти доступно.XLW library
?32-bit Excel
? XLL на самом деле просто переименованная DLL. Если у вас 32-разрядный Excel, то весь процесс Excel имеет 32-разрядное виртуальное адресное пространство для хранения (и Windows резервирует половину этого пространства для ОС). Таким образом, ваш процесс (как XLL, так и сам Excel) ограничен в общей сложности 2G.
Ваш выбор:
Последний вариант, очевидно, намного сложнее, и копирование данных между процессами не будет таким быстрым, но оно является опция.
Других решений пока нет …