Re: [Q] Maximum Array size
Hiroki Kashiwazaki <reo@cc.hokudai.ac.jp> writes:
> こういった配列の制限は主記憶容量(と他のプロセスが占有する資源)で
> 定まるのか、それとも何か他の要素があるのかどうにも良く分かっていま
> せん。皆様からの情報をお寄せ頂ければ幸いです。
Linux だと、
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define ASIZE 3000000
struct packet {
int nodenumber;
int destination;
int source;
char body [ 256 ];
} ary[ASIZE];
int main()
{
char buf[100];
pid_t pid = getpid();
(void)sprintf(buf, "cat /proc/%d/maps", pid);
(void)system(buf);
(void)printf("\n&(ary[%d].body[255]) = %08x\n",
ASIZE-1, &(ary[ASIZE-1].body[255]));
return 0;
}
を実行した結果は、
08048000-08049000 r-xp 00000000 08:01 579 /home/tesigana/tmp/a.out
08049000-0804a000 rw-p 00000000 08:01 579 /home/tesigana/tmp/a.out
40000000-40016000 r-xp 00000000 08:01 210953 /lib/ld-2.2.2.so
40016000-40017000 rw-p 00015000 08:01 210953 /lib/ld-2.2.2.so
40017000-40018000 rw-p 00000000 00:00 0
40025000-4014b000 r-xp 00000000 08:01 32484 /lib/i686/libc-2.2.2.so
4014b000-40151000 rw-p 00125000 08:01 32484 /lib/i686/libc-2.2.2.so
40151000-40155000 rw-p 00000000 00:00 0
bfffe000-c0000000 rwxp fffff000 00:00 0
&(ary[2999999].body[255]) = 37f0a81f
ですので、静的配列を大きくとりすぎると /lib/i686/libc-2.2.2.so が
貼り付いている領域を破壊してしまうのでないかと。
---------------------------------------------------------------------
tesigana@mtf.biglobe.ne.jp
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735