Rumah >pembangunan bahagian belakang >C++ >Timbunan atau Tindanan: Di manakah `baru` Memperuntukkan Memori untuk Struktur C#?
Struktur C# dan Operator 'baharu': Peruntukan Timbunan lwn. Tindanan
Operator new
dengan struct dalam C# memperkenalkan kerumitan mengenai peruntukan memori (timbunan atau tindanan). Tidak seperti kelas, yang sentiasa memperuntukkan pada timbunan, struct mempamerkan gelagat bernuansa.
Penggunaan Pembina Tanpa Parameter
Menggunakan new
dengan pembina tanpa parameter (cth., new Guid()
), memperuntukkan memori struct pada tindanan. Pengkompil C# menganggap ini sebagai permulaan sifar, bukan panggilan pembina, mengikut spesifikasi CLI.
Pembina dengan Parameter
Menggunakan new
dengan pembina berparameter (mis., new Guid(someString)
) membawa kepada peruntukan bergantung konteks:
initobj
awal diikuti dengan panggilan pembina. Tugasan seterusnya menggunakan pembina berbeza menimpa data sedia ada di lokasi memori yang sama.ldloca
untuk mendapatkan alamat pembolehubah. Alamat cache ini kemudiannya dimulakan menggunakan sama ada initobj
(pembina tanpa parameter) atau panggilan pembina (pembina berparameter), membolehkan penggunaan semula memori.Ringkasan
Walaupun dari segi konsep, setiap new
panggilan pada struct mungkin kelihatan memperuntukkan memori tindanan, realitinya lebih rumit. Tingkah laku peruntukan sangat bergantung pada konteks. Memahami nuansa ini adalah penting untuk kod yang cekap dan mencegah komplikasi yang tidak dijangka.
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!