在我的 64 位 Ubuntu 16.04 上,默认堆栈大小为 8192 字节。如果我将它设置为无限制,似乎它vdso被重新映射到一个完全不同的内存区域。
$ ulimit -s
8192
$ cat /proc/`pgrep ascii`/maps
08048000-080ed000 r-xp 00000000 08:03 7736874 /home/sherlock/ascii
080ed000-080ef000 rw-p 000a5000 08:03 7736874 /home/sherlock/ascii
080ef000-080f1000 rw-p 00000000 00:00 0
09803000-09825000 rw-p 00000000 00:00 0 [heap]
80000000-80001000 rwxp 00000000 00:00 0
f7f74000-f7f76000 rw-p 00000000 00:00 0
f7f76000-f7f79000 r--p 00000000 00:00 0 [vvar]
f7f79000-f7f7b000 r-xp 00000000 00:00 0 [vdso]
ff86f000-ff891000 rw-p 00000000 00:00 0 [stack]
$ ulimit -s unlimited
$ ulimit -s
unlimited
$ cat /proc/`pgrep ascii`/maps
08048000-080ed000 r-xp 00000000 08:03 7736874 /home/sherlock/ascii
080ed000-080ef000 rw-p 000a5000 08:03 7736874 /home/sherlock/ascii
080ef000-080f1000 rw-p 00000000 00:00 0
0988a000-098ac000 rw-p 00000000 00:00 0 [heap]
2aa35000-2aa37000 rw-p 00000000 00:00 0
2aa37000-2aa3a000 r--p 00000000 00:00 0 [vvar]
2aa3a000-2aa3c000 r-xp 00000000 00:00 0 [vdso]
80000000-80001000 rwxp 00000000 00:00 0
ffed3000-ffef5000 rw-p 00000000 00:00 0 [stack]
谁能解释这种行为?