Apabila menggunakan kata kunci "baharu" untuk mencipta struktur dalam C#, adakah memori diperuntukkan pada timbunan atau timbunan?
Apabila mencipta contoh kelas menggunakan pengendali "baharu", memori diperuntukkan pada timbunan. Tetapi apabila menggunakan pengendali "baru" untuk mencipta contoh struktur, di manakah memori diperuntukkan?
Timbunan ingatan dan timbunan ingatan
Timbunan ialah struktur data yang digunakan untuk menyimpan pembolehubah tempatan dan panggilan kaedah semasa pelaksanaan program. Ia ialah struktur masuk-dahulu-keluar (LIFO), yang bermaksud bahawa memori yang paling baru diperuntukkan dialih keluar dahulu.
Timbunan ialah ruang memori dinamik di mana objek dicipta dan diperuntukkan mengikut keperluan. Tidak seperti timbunan, ia tidak mengikut susunan tertentu peruntukan memori.
Gunakan kata kunci "baharu" untuk mencipta peruntukan memori untuk struktur
Untuk struktur, apabila menggunakan pengendali "baharu", anda perlu mempertimbangkan dua situasi:
Pembina tanpa parameter (Guid(); baharu):
Pembina dengan parameter (Panduan baharu(someString);):
Penjanaan kod IL
Untuk memahami perkara yang berlaku di sebalik tabir, mari kita periksa kod bahasa perantaraan (IL) yang dijana oleh pengkompil C#:
newobj
memperuntukkan ruang pada tindanan dan memanggil pembina berparameter untuk nilai perantaraan (cth., parameter kaedah). call instance
memulakan lokasi storan yang diperuntukkan (tindanan atau timbunan) menggunakan pembina berparameter. initobj
memulakan lokasi storan yang diperuntukkan (tindanan atau timbunan), mengosongkan kandungannya kepada sifar (untuk panggilan pembina tanpa parameter). Kesimpulan
Ringkasnya, tidak seperti contoh kelas yang sentiasa memperuntukkan memori pada timbunan, menggunakan operator "baharu" pada struct akan memperuntukkan memori pada timbunan dalam kes pembina tanpa parameter dan dalam kes pembina berparameter pada timbunan (untuk simpanan sementara). Tingkah laku ini dicerminkan dalam kod IL yang dijana dan memberikan pandangan tentang proses pengurusan memori yang mendasari.
Atas ialah kandungan terperinci Timbunan atau Tindanan: Di manakah `baru` Memperuntukkan Memori untuk Struktur C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!