AIX的处理器PowerPC有16个地址寄存器,对应的AIX下32位进程地址空间分为16段,每段256M,默认配置所有Userdata、heap、Stack最多占用一段256M,共享内存可以分配11段。
USERDATA、heap、stack三种最常用的内存只有256M,只能应付一般情况,AIX系统中经常出现内存耗尽异常。解决方法是增加MAXDATA值。
(1) 编译时,ld命令增加参数“-bmaxdata:0x80000000”,指定编译产生的进程可以使用到1.5G堆栈,段2---段8,执行“dump –ov XXX”可以查看可执行文件头部的可变参数。
(2) AIX5.1后使用“ldedit –bmaxdata:0x80000000”可以修改可执行文件的MAXDATA值。
(3) AIX4.3后可以修改环境变量“LDR_CNTRL=MAXDATA=0x80000000”,环境变量生效后,所有启动的进程都可以使用1.5G的userdata。
增加MAXDATA后,必然压缩共享内存的使用空间。