Solaris 12.3 C++ 编译器内存不足
Posted
技术标签:
【中文标题】Solaris 12.3 C++ 编译器内存不足【英文标题】:Solaris 12.3 C++ compiler out of memory 【发布时间】:2019-02-11 09:30:24 【问题描述】:我有一个 24MB 的 swig 生成的 C++ 代码文件,将近 5,00,000 行代码。将编译器优化级别设置为 xO0 时,我能够编译它,但一旦我添加任何其他 C++ 编译器标志(如 xprofile ...),就会失败。我正在使用 Solaris Studio 12.3 C++ 编译器。
以下是控制台错误:
Element size (in bytes): 48
Table size (in elements): 2560000
Table maximum size: 134217727
Table size increment: 5000
Bytes written to disk: 0
Expansions required: 9
Segments used: 1
Max Segments used: 1
Max Segment offset: 134217727
Segment offset size:: 27
Resizes made: 0
Copies due to expansions: 4
Reset requests: 0
Allocation requests: 2827527
Deallocation requests: 267537
Allocated element count: 4086
Free element count: 2555914
Unused element count: 0
Free list size (elements): 0
ir2hf:错误:内存不足
提前致谢。
【问题讨论】:
抱歉,我的魔杖不起作用,我怀疑其他人的也一样。要么在主机上安装更多内存,要么(如果在虚拟机中运行)为虚拟机分配更多内存。如果编译器在使用某些选项时内存不足 - 编译级别是一个选项 - 这是一个公平的迹象,它需要更多内存才能工作。通常没有办法让编译器用比它需要的更少的内存来做事情。因此,您可以为其提供更多可用内存。要么,要么编辑文件并从中创建一组较小的文件,然后分别编译。 我的水晶球告诉你试试这个:以 root 身份:usermod -K defaultpriv=basic,sys_resource <userid>
,然后以用户身份:ulimit -d unlimited
我不想把它变成更小的文件,因为它是自动生成的文件。
12.3 已经过时了。 IIRC,当时这些工具还是 32 位的,所以他们不能使用超过 4G 的内存。您可能需要更新的编译器。
【参考方案1】:
我发现这个article 表明它与 Solaris 数据段的内存量有关。
按照博客中的步骤,尝试取消限制。
$ usermod -K defaultpriv=basic,sys_resource karel
现在注销并再次登录并更改限制:
$ ulimit -d unlimited
然后检查限制是否已更改
$ ulimit -d
输出应该是unlimited
【讨论】:
内存已设置为“无限”,但仍无法正常工作。 你确定你的机器上有足够的内存吗? 我正在使用服务器。它有足够的 Memory.load 平均值:3.41、4.07、4.48 17:00:36 1211 个进程:1199 个休眠、3 个僵尸、6 个停止、3 个 CPU 状态:92.2% 空闲、3.5% 用户、4.3% 内核、0.0% iowait, 0.0% swap 内存:160G real, 41G free, 102G swap in use, 20G swap free 好的,看起来内存充足。抱歉,不知道如何解决。以上是关于Solaris 12.3 C++ 编译器内存不足的主要内容,如果未能解决你的问题,请参考以下文章