最小限のネイティブ Linux x86-64 アプリケーションを実行すると、カーネルによってスタックがセットアップされていることに気付きました。中を見ると、次のように表示され/proc/<pid>/maps
ます。
7ffffffde000-7ffffffff000 rwxp 00000000 00:00 0 [stack]
そして、RSP レジスタを検査すると、保持されます0x7fffffffe0c0
。
私が理解していないのは、なぜスタックが 135k バイトしかないのかということです。x86-64 では、スタック mmap がメガバイト単位になると予想していました。または、スタック mmap には、私が気付いていない魔法のような特性がありますか?
スタック オーバーフローを回避するために実行時に手動でスタックのサイズを変更するのは、ユーザーランド アプリケーションの責任ですか? もしそうなら、どのようなメカニズムで?それとも、カーネルはこれを自動的に行いますか?