2014-10-19 59 views
2

我想在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的堆大小?

+0

实际上,5g(它被评估为5,368,709,120)不是一个整数(假设是32位长整数),因为它太大了。有趣的是,你击中了32位限制TWICE :) – 2014-10-20 04:46:40

+0

是的,你绝对是对的!实际上,5g不被认为是“整数”,表明我最终构建的单声道二进制文件仍然是一个32位二进制文​​件。我刚刚学到了一个“新的”技巧,“单声道-V”将打印出体系结构,我在那里检查它仍然是x86而不是amd64。 修复问题环境变量后,问题就解决了。 – trek42 2014-10-21 02:13:36

回答

1

您仍在运行32位版本的mono(检查您的PATH env var)。这也解释了5g最大堆大小的解析(它可以正确使用64位单声道)。 上面的配置命令的缺省设置是安装在/ usr/local/bin中,所以只需使用/ usr/local/bin/mono program.exe来运行程序。

+0

谢谢!是的,这正是原因。我从config.status搜索了“i386”,并发现我的$ CC被定义为“cc -arch i386”,这解释了为什么我最终构建了一个32位单声道。修复环境变量后,我得到了这个工作。 – trek42 2014-10-21 02:09:44