Sepertinya setiap buku .NET berbicara tentang tipe nilai vs tipe referensi dan menjadikannya sebagai titik (sering salah) menyatakan di mana setiap tipe disimpan - heap atau stack. Biasanya ada di beberapa bab pertama dan disajikan sebagai fakta yang sangat penting.
Aku sangat setuju; Saya melihat ini setiap waktu.
Mengapa .NET buku berbicara tentang alokasi memori tumpukan vs tumpukan?
Salah satu bagian dari alasannya adalah karena banyak orang datang ke C # (atau bahasa .NET lainnya) dari latar belakang C atau C ++. Karena bahasa-bahasa itu tidak memberlakukan bagi Anda peraturan tentang masa penyimpanan, Anda diharuskan untuk mengetahui aturan-aturan itu dan mengimplementasikan program Anda dengan cermat untuk mengikutinya.
Sekarang, mengetahui aturan itu dan mengikutinya dalam C tidak mengharuskan Anda memahami "heap" dan "the stack". Tetapi jika Anda benar-benar mengerti bagaimana struktur data bekerja maka seringkali lebih mudah untuk memahami dan mengikuti aturan.
Ketika menulis buku pemula, wajar bagi penulis untuk menjelaskan konsep-konsep dalam urutan yang sama itu mereka pelajari. Itu belum tentu urutan yang masuk akal bagi pengguna. Saya baru-baru ini menjadi editor teknis untuk buku pemula C # 4 Scott Dorman, dan salah satu hal yang saya sukai adalah Scott memilih pemesanan yang cukup masuk akal untuk topik-topik tersebut, daripada memulai dengan topik yang sebenarnya cukup canggih dalam manajemen memori.
Bagian lain dari alasannya adalah bahwa beberapa halaman dalam dokumentasi MSDN sangat menekankan pertimbangan penyimpanan. Dokumentasi MSDN yang lebih tua yang masih berkeliaran sejak awal. Sebagian besar dokumentasi memiliki kesalahan kecil yang tidak pernah dihapuskan, dan Anda harus ingat bahwa itu ditulis pada waktu tertentu dalam sejarah dan untuk audiens tertentu.
Mengapa stack vs heap bahkan penting bagi (pemula) .NET developer?
Menurut saya, tidak. Yang jauh lebih penting untuk dipahami adalah hal-hal seperti:
- Apa perbedaan dalam semantik salinan antara tipe referensi dan tipe nilai?
- Bagaimana parameter "ref int x" berperilaku?
- Mengapa tipe nilai harus berubah?
Dan seterusnya.
Anda mengalokasikan barang dan hanya berfungsi, bukan?
Itu yang ideal.
Sekarang, ada situasi di mana itu penting. Pengumpulan sampah luar biasa dan relatif murah, tetapi tidak gratis. Menyalin struktur kecil di sekitar relatif murah, tetapi tidak gratis. Ada skenario kinerja realistis di mana Anda harus menyeimbangkan biaya tekanan pengumpulan dengan biaya menyalin berlebihan. Dalam kasus tersebut, sangat membantu untuk memiliki pemahaman yang kuat tentang ukuran, lokasi, dan masa pakai aktual semua memori yang relevan.
Demikian pula, ada skenario interop realistis di mana perlu untuk mengetahui apa yang ada di tumpukan dan apa yang ada di tumpukan, dan apa yang bisa dipindahkan oleh pengumpul sampah. Itu sebabnya C # memiliki fitur-fitur seperti "fix", "stackalloc" dan sebagainya.
Tapi itu semua adalah skenario tingkat lanjut. Idealnya seorang programmer pemula perlu khawatir tentang hal-hal ini.