[gcc] Cannot allocate memory [resolved]
最近在项目中遇到一个奇怪的问题,具体的报错如下
make[1]: stat: ../../../crypto/asn1/tasn_enc.c: Cannot allocate memory
这个问题看起来是GCC的问题,最后的解决方案确让人有点意外,若有耐心,继续往下面读。
第一眼看上去,好像是内存不够,想当然的在命令行跑了一下free -m,其结果令人诧异,因为可用内存居然还剩下有70%之多。
偿试google. 得到如下连接
1, http://wiki.vpslink.com/Prevent:_Compiling_Yields_%27Cannot_allocate_memory%27
细读之,大概意思是说gcc 默认认为host主机上内存为母机上的总内存,内存分配释放全交由gcc自己管理,大概是说,关于内存,gcc你自己看着办吧。看起来有点意思,我的guest为4G<vm设置的>,母机为windows7 8G,好像可以一试,
于是乎,开始跑下面的命令
ulimit -v 60000
心里还是不踏实,再加一行
ulimit -m 60000
继续 make clean && make
几分钟后,可恶的Cannot allocate memory 继续出现,这不科学。肯定哪里搞错了,细想之,仍然无解,继续google
这次得到的连接如下
2, http://hostingfu.com/article/compiling-with-gcc-on-low-memory-vps
主要是这两个参数的调整,ggc-min-expand,ggc-min-heapsize
再一次尝试
CFLAGS="$CFLAGS --param ggc-min-expand=0 --param ggc-min-heapsize=8192"
继续 make clean && make
几分钟后,可恶的Cannot allocate memory 继续出现,这太不科学。(开始想踢主机了)
回想一下,这个问题以前都没出现,最近开始用虚拟机时才遇到的,于是继续切换回物理机器
make clean && make
过了一会,Cannot allocate memory 还是来了。
为了还原之前一直没出错的环境 ,这一次没有mount windows上面的文件,而是直接在物理机器上svn up
make clean && make
1个小时后,问题仍然没有重现,直到编译完成。
为了避免是因为人品,运气爆发而没遇到的情况 ,反复make clean && make 三次。问题仍然没有重现。
到此,至少我们可以确定,这至少与mount windows共享目录相关。
继续google , mount cannot allocate memory
得到如下连接
http://hi.baidu.com/zhangbin101004/item/e459f4d1f818dfbd33db903b
- Set “HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\LargeSystemCache” to “1″.
- Set “HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\Size” to “3″.
根据描述 ,regedit ,然后找到相应的项修改
a, 打开windows任务管理器,结束 explorer.exe,再启动explorer.exe
b, 进debian重新mount windows目录。
c, make clean && make
可恶的cannot allocate memory 再也没有出现过,世界突然安静了。
至此,虽然还不太明白 具体的原因是什么,但问题基本解决。
再回味一下解决问题的过程,简直无法直视,明明是debian下面提示内存分配失败,却通过修改windows的注册表解决了。常规思维里面,debian与windows唯一的关联就是网络共享,为什么gcc不报网络错误,而要报个内存分配失败?

浙公网安备 33010602011771号