我想在OSX 10.9上运行需要超过4G RAM的.NET可执行文件。我安装了Xamarin Studio,但AFAIKT Xamarin没有配备64位单声道版本,因此我决定使用“with-large-heap = yes”配置制作自定义64位单声道,并将其安装在不同的位置。如何配置单声道以使用4G以上的内存?
git clone https://github.com/mono/mono
cd mono
./configure --prefix=<my-local-dir> --enable-nls=no --with-large-heap=yes
make
make install
(我还内置一个64位的F#和安装在我的本地-DIR,按照this page “方案3”。)
然而,当我使用的是64位单声道运行可执行文件(在Xamarin中使用规范的“fsharpc”构建的F#程序),它仍然与System.OuOtfMemory异常崩溃。我尝试这样做:
export PATH=$PATH:<my-local-dir>/bin
MONO_GC_PARAMS=max-heap-size=5g <my-local-dir>/bin/mono <my-executable>
,它给一个警告
Warning: In environment variable `MONO_GC_PARAMS': `max-heap-size` must be an integer.
(此错误信息是有点误导,我认为它的真正含义5G是太大,不支持,因为它不抱怨如果我在那里放一个“3g”)。当程序超出内存时,程序仍然会以相同的异常崩溃。
我错过任何重要的事情吗?如何配置单声道具有超过4G的堆大小?
实际上,5g(它被评估为5,368,709,120)不是一个整数(假设是32位长整数),因为它太大了。有趣的是,你击中了32位限制TWICE :) – 2014-10-20 04:46:40
是的,你绝对是对的!实际上,5g不被认为是“整数”,表明我最终构建的单声道二进制文件仍然是一个32位二进制文件。我刚刚学到了一个“新的”技巧,“单声道-V”将打印出体系结构,我在那里检查它仍然是x86而不是amd64。 修复问题环境变量后,问题就解决了。 – trek42 2014-10-21 02:13:36