64 位可执行文件中的 MAXDATA 参数

MAXDATA parameter in 64-bit executables

我开始明白,在 AIX 上为 64 位应用程序设置 -bmaxdata 或 LDR_CNTRL=MAXDATA... 只需要设置 limit进程的堆大小。换句话说,没有必要像 32 位可执行文件那样提高任何限制。

在特定的 AIX 7.1 系统上,其中 OBJECT_MODE=64 dump -ov my-executable 将 maxdata 显示为 0x00000000 并且未设置 LDR_CNTRL,我必须设置 LDR_CNTRL=MAXDATA... 到我们在旧的 32 位版本中设置的 2GB 左右的数字,以便能够初始化(initgroups() 失败,pthread_create 失败等)我的 64 位应用程序。

在某些情况下,是否有必要在 64 位进程中设置 MAXDATA 以使堆大小没有一些古老的 256MB-ish 上限?

# /usr/bin/ulimit -a
time(seconds)        unlimited
file(blocks)         2097151
data(kbytes)         131072
stack(kbytes)        32768
memory(kbytes)       32768
coredump(blocks)     2097151
nofiles(descriptors) 2000
threads(per process) unlimited
processes(per user)  unlimited

# OBJECT_MODE=64 dump -ov bin/httpd

bin/httpd:

                        ***Object Module Header***
# Sections      Symbol Ptr      # Symbols       Opt Hdr Len     Flags
         4      0x000c78b0           8683               120     0x1002
Flags=( EXEC DYNLOAD DEP_SYSTEM )
Timestamp = "Oct 05 19:03:19 2015"
Magic = 0x1f7  (64-bit XCOFF)

                        ***Optional Header***
Tsize       Dsize       Bsize       Tstart      Dstart
0x0007c66a  0x00009d06  0x00003c08  0x1000001f8  0x110000862

SNloader    SNentry     SNtext      SNtoc       SNdata
0x0004      0x0002      0x0001      0x0002      0x0002    

TXTalign    DATAalign   TOC         vstamp      entry
0x0007      0x0003      0x1100091b8  0x0001      0x110003a70

maxSTACK    maxDATA     SNbss       magic       modtype
0x00000000  0x00000000  0x0003      0x010b        1L

您示例中的限制因素是 ulimit 'data' 值。如果设置为 'unlimited',您将观察到预期的输出。