For reasons unknown to the author, Linux systems restrict, by default, the maximum size of shared memory segments to much smaller values than normal physical or virtual memory limits. e.g. A Suse 2.4.20 Linux system restricts the maximum size of a shared memory segment to 32 MBytes (the on-line documentation says the limit is 4 MBytes !)
This limit must be changed if large arrays are to used in shared memory segments.
(There are other system limits such as the total number of shared memory segments allowed, but these should normally not be a problem.)
On Linux systems /sbin/sysctl may be used to change this limit at run-time (there are doubtless other ways of doing this). You appear to need ``root'' privileges to be able to do this.
e.g.:
/sbin/sysctl -w kernel.shmmax=256000000
should set SHMMAX to be 256000000 bytes.
/sbin/sysctl -a
can be used to obtain a list of all the system limit variables and values. (See man sysctl for further information.)