GNU/Linux >> Belajar Linux >  >> Linux

Mengapa di Linux modern, ukuran tumpukan default sangat besar - 8MB (bahkan 10 pada beberapa distribusi)

Seperti yang dikatakan orang lain, dan seperti yang disebutkan dalam tautan yang Anda berikan dalam pertanyaan Anda, memiliki tumpukan 8MiB tidak merugikan apa pun (selain menghabiskan ruang alamat — pada sistem 64-bit itu tidak masalah).

Linux telah menggunakan tumpukan 8MiB untuk waktu yang sangat lama; perubahan tersebut diperkenalkan pada kernel versi 1.3.7, pada bulan Juli 1995. Saat itu disajikan sebagai memperkenalkan batasan, sebelumnya tidak ada:

Batasi tumpukan ke beberapa default yang waras:root selalu dapat meningkatkan batas ini jika diperlukan.. 8MB tampaknya masuk akal.

Di Linux, batas tumpukan juga memengaruhi ukuran argumen program dan lingkungan, yang dibatasi hingga seperempat dari batas tumpukan; kernel memberlakukan minimal 32 halaman untuk argumen dan lingkungan.

Untuk utas, jika batas tumpukan (RLIMIT_STACK ) tidak terbatas, pthread_create menerapkan batasannya sendiri untuk tumpukan thread baru — dan pada sebagian besar arsitektur, kurang dari 8MiB.


8MB adalah virtual ukuran tumpukan. Kesalahan halaman akan terjadi saat aplikasi Anda mencoba menggunakan lebih banyak tumpukan daripada yang dialokasikan secara fisik saat ini. Penangan kesalahan halaman kernel kemudian akan mengalokasikan fisik halaman dan kemudian aplikasi Anda akan melanjutkan.

Lihat https://unix.stackexchange.com/a/280865/21212 untuk penjelasan lengkap.

Jadi, kurangi ukuran tumpukan Anda seharusnya tidak berpengaruh dalam mengurangi penggunaan memori fisik aplikasi Anda.


Linux
  1. Mengapa Linux? – Beberapa Alasan Untuk Mengkonversi Ke Linux

  2. Mengapa Cara Berikut Tidak Mengubah Ukuran Batas File Inti?

  3. Bagaimana cara menemukan ukuran tumpukan maksimum?

  1. Cara Mengubah Shell Default Di Linux

  2. Apa unit ukuran default di linux ls -l perintah

  3. Mengapa Perl diinstal secara default dengan sebagian besar distribusi Linux?

  1. Mengapa output dari beberapa program Linux tidak menuju ke STDOUT atau STDERR?

  2. BCRYPT - Mengapa Distribusi Linux tidak menggunakannya secara default?

  3. Apa urutan default dari jenis Linux?