Solaris 12.3 C++;编译器内存不足 我有一个生成24MB C++代码文件,将近5,00000行代码。当编译器优化级别设置为XO0时,我能够编译它,但是只要添加任何其他C++编译器标志(如XPrror……),就失败了。我使用Solaris Studio 12.3 C++编译器。

Solaris 12.3 C++;编译器内存不足 我有一个生成24MB C++代码文件,将近5,00000行代码。当编译器优化级别设置为XO0时,我能够编译它,但是只要添加任何其他C++编译器标志(如XPrror……),就失败了。我使用Solaris Studio 12.3 C++编译器。,c++,compiler-errors,solaris-10,solaris-studio,C++,Compiler Errors,Solaris 10,Solaris Studio,以下是控制台错误: 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

以下是控制台错误:

    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:错误:内存不足

提前感谢。

我发现这表明它与Solaris减少数据段的内存量有关

按照博客中的步骤,尝试取消限制

$ usermod -K defaultpriv=basic,sys_resource karel
现在注销并再次登录并更改限制:

$ ulimit -d unlimited
然后检查限制是否已更改

$ ulimit -d
输出应该是无限制的

我发现这表明它与Solaris为数据段提供的内存量有关

按照博客中的步骤,尝试取消限制

$ usermod -K defaultpriv=basic,sys_resource karel
现在注销并再次登录并更改限制:

$ ulimit -d unlimited
然后检查限制是否已更改

$ ulimit -d

输出应该是
无限制的

对不起,我的魔杖坏了,我怀疑其他人的也坏了。在主机上安装更多内存,或者(如果在虚拟机中运行)为虚拟机分配更多内存。如果编译器使用某些选项耗尽内存(编译级别是一个选项),这是一个公平的信号,它需要更多内存才能工作。一般来说,没有办法让编译器使用比所需内存更少的内存来完成任务。因此,您只需要为它提供更多可用内存。或者编辑该文件并从中创建一组较小的文件,然后分别编译它们。我的水晶球告诉我们尝试这样做:作为root:
usermod-K defaultpriv=basic,sys\u resource
,然后作为user:
ulimit-d unlimited
我不想将其制作成较小的文件,因为它是自动生成的文件。12.3已经很旧了。IIRC,这些工具当时仍然是32位的,所以它们不能使用超过4G的内存。你可能需要一个更新的编译器。对不起,我的魔杖坏了,我怀疑其他人的也坏了。在主机上安装更多内存,或者(如果在虚拟机中运行)为虚拟机分配更多内存。如果编译器使用某些选项耗尽内存(编译级别是一个选项),这是一个公平的信号,它需要更多内存才能工作。一般来说,没有办法让编译器使用比所需内存更少的内存来完成任务。因此,您只需要为它提供更多可用内存。或者编辑该文件并从中创建一组较小的文件,然后分别编译它们。我的水晶球告诉我们尝试这样做:作为root:
usermod-K defaultpriv=basic,sys\u resource
,然后作为user:
ulimit-d unlimited
我不想将其制作成较小的文件,因为它是自动生成的文件。12.3已经很旧了。IIRC,这些工具当时仍然是32位的,所以它们不能使用超过4G的内存。您可能需要一个更新的编译器。内存已设置为“无限”,但仍无法工作。您确定计算机上有足够的内存吗?我正在服务器上工作。它有足够的内存。平均负载: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%交换内存:160G实存,41G空闲,102G交换正在使用,20G交换空闲OK,看起来内存充足。抱歉,不知道如何解决此问题。内存已设置为“无限”,但仍无法工作。您确定计算机上有足够的内存吗?我正在使用服务器。它有足够的内存。平均负载: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%交换内存:160G实存,41G空闲,102G交换正在使用,20G交换空闲OK,看起来内存充足。对不起,我不知道怎么解决这个问题。