Rumah >pembangunan bahagian belakang >C++ >Mengapakah Saiz Tindanan C# Lalai Masih 1 MB (atau 4 MB untuk 64-bit)?
Mengapa saiz tindanan C# masih 1MB? Terokai sebab sejarah dan teknikalnya
Dengan PC moden yang mempunyai memori fizikal yang mencukupi, saiz tindanan C# kekal pada 1MB untuk proses 32-bit dan 4MB untuk proses 64-bit, menimbulkan persoalan tentang logik di sebalik had yang kelihatan sewenang-wenang ini.
Asal-usul Sejarah: Legasi Windows NT
Saiz tindanan lalai 1MB pada asalnya ditubuhkan semasa pembangunan Windows NT. Apabila panggilan API boleh laku atau CreateThread() tidak menentukan saiz tindanan tertentu, sistem pengendalian lalai kepada nilai ini.
Sebab memilih 1MB
Memilih 1MB mungkin dipengaruhi oleh pelbagai faktor. Pertama, pada zaman awal komputer peribadi, ia mewakili sejumlah besar memori. Kedua, seni bina memori maya halaman permintaan Windows NT membolehkan tindanan diperuntukkan secara maya, meminimumkan kesannya pada memori fizikal.
Peruntukan berlebihan program .NET
Walaupun 1MB mungkin baik untuk menuntut program asli, ia terbukti berlebihan untuk aplikasi .NET. Dalam .NET, rentetan dan tatasusunan diperuntukkan pada timbunan terurus, mengurangkan penggunaan tindanan. Selain itu, penunjuk tidak selamat dan stackalloc jarang digunakan.
Kompilasi JIT dan penggunaan tindanan
Satu-satunya penggunaan tindanan yang ketara dalam .NET berlaku semasa kompilasi just-in-time (JIT) pada masa jalanan. Tindanan digunakan untuk pengoptimuman kod dan pengendalian pengecualian, tetapi biasanya hanya memerlukan beberapa puluh ribu bait.
Pekerjaan timbunan
Satu ciri .NET ialah timbunan telah diduduki, menyimpan ruang dalam fail paging untuk kemungkinan pertukaran. Proses yang mahal ini pada asalnya dilaksanakan sebagai langkah keselamatan tetapi sejak itu telah menjadi usang.
Perubahan moden: tiada lagi penghunian tindanan
Dalam versi terkini .NET (bermula sekitar .NET 4.5), CLR telah menghapuskan stack hogging atas sebab prestasi. Perubahan ini mengurangkan lagi kesan saiz tindanan pada penggunaan memori.
Kesimpulan
Saiz tindanan 1MB dalam C# ialah artifak sejarah, dipengaruhi oleh pengehadan platform pengkomputeran awal. Ia mungkin kelihatan ketinggalan zaman memandangkan keupayaan perkakasan moden, tetapi ia masih merupakan lalai yang munasabah kerana overhed memori yang agak rendah dan kapasiti yang mencukupi untuk kebanyakan aplikasi.
Atas ialah kandungan terperinci Mengapakah Saiz Tindanan C# Lalai Masih 1 MB (atau 4 MB untuk 64-bit)?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!