Greetings -
I'm porting a C application to an AIX (6.1) system, and have bumped into the limits AIX imposes on memory allocation, namely the default limit of 256MB for a process. I'm aware of the compilation flag that allows an application to gain access to up to 8 memory segments (each 256MB, for a total of 2GB) ... but that seems like an unnecessary restriction on a computer that offers more RAM than that.
A toy example I'm using is given here
int main(int argc, char *argv[]) {
long long size = 2100000000;
int *T = (int *)malloc (size);
printf("alloc'd %ld : %d\n",size, T);
free(T);
}
Compiling this without increasing segment count results in the malloc call returning a null pointer:
% /usr/vac/bin/xlc_r -o hello hello.c
% ./hello
alloc'd 2100000000 : 0
but adding the correct compile flag (for xlc) makes it work:
% /usr/vac/bin/xlc_r -bmaxdata:0x80000000 -o hello hello.c
% ./hello
alloc'd 2100000000 : 268486928
(note, malloc returns a null pointer even with this flag if I try to allocate 2200000000 bytes)
But I'm unable to figure out how to allow my program to use more memory than that. My impression is that in 64-bit mode, none of these memory restrictions should even be present, e.g.
(link omitted because I'm too new to this group ... but google will find it for you)
Which suggests to me that the first compilation above should've worked. Am I in 64-bit mode? I believe so:
% export OBJECT_MODE=64
% /usr/vac/bin/xlc_r -c hello.c && file hello.o
hello.o: 64-bit XCOFF executable or object module not stripped
that's not what I see if I explicitly go for a 32-bit compile:
% /usr/vac/bin/xlc_r -q32 -c hello.c && file hello.o
hello.o: executable (RISC System/6000) or object module not stripped
So ... what incredibly naive thing am I doing wrong? Any guidance is greatly appreciated.
(side note: I'm using xlc because it's required for the project. gcc isn't a viable option)
Thanks in advance.