Memahami Penciptaan Objek dalam C : Stack vs. Heap vs. Segmen Memori Lain
Apabila mencipta objek dalam C, pembangun mempunyai pilihan antara meletakkannya pada timbunan atau timbunan menggunakan sintaks yang berbeza. Walau bagaimanapun, pilihan ini mempunyai implikasi selain daripada memilih antara tindanan dan ingatan timbunan.
Sintaks Penciptaan Objek
Mencipta objek pada tindanan menggunakan pengisytiharan objek mudah (cth., Objek o;) meletakkannya dalam storan automatik, di mana hayatnya berakhir apabila ia keluar skop.
Sebaliknya, mencipta objek pada timbunan melibatkan pengagihan memori secara dinamik menggunakan operator baharu (cth., Object* o = new Object();). Ini memperuntukkan memori dinamik, memberikan penuding o kepada objek yang diperuntukkan timbunan.
Lokasi dan Konteks Storan
Walaupun sintaks membayangkan penciptaan objek pada timbunan atau timbunan, adalah penting untuk memahami bahawa piawaian C tidak mentakrifkan lokasi storan secara eksplisit berdasarkan syarat ini. Sebaliknya, ia mentakrifkan tempoh storan sebagai automatik, dinamik, statik atau benang-tempatan.
Storan Automatik (Timbunan)
Pembolehubah setempat, seperti Objek pengisytiharan objek mudah o;, dianggap storan automatik, biasanya dilaksanakan pada timbunan panggilan. Hayat mereka terhad kepada skopnya.
Storan Dinamik (Timbunan)
Objek yang diperuntukkan menggunakan baharu mempunyai storan dinamik, biasanya dilaksanakan pada timbunan. Objek ini kekal hidup sehingga dipadamkan secara eksplisit menggunakan padam.
Storan Tempatan Statik dan Benang
Pembolehubah statik (diisytiharkan pada ruang nama atau skop fail) dan pembolehubah setempat benang ialah biasanya diperuntukkan dalam kawasan ingatan tertentu, tidak pada timbunan mahupun timbunan.
Contoh
Pertimbangkan kod berikut:
struct Foo { Object o; }; Foo foo; int main() { Foo f; Foo* p = new Foo; Foo* pf = &f; }
Selain itu, penunjuk (seperti p dan pf) juga mempunyai tempoh penyimpanan, biasanya automatik, yang ditentukan oleh konteks.
Kesimpulan
Memahami penciptaan objek dalam C melangkaui memilih antara tindanan dan timbunan. Tempoh penyimpanan dan konteks objek menentukan lokasinya dalam ingatan. Dengan mengambil kira faktor ini, pembangun boleh mengoptimumkan penggunaan memori dan mengelakkan kemungkinan ralat.
Atas ialah kandungan terperinci Di Mana Objek Tinggal dalam C : Timbunan, Timbunan atau Tempat Lain?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!