Rumah > pembangunan bahagian belakang > C++ > Di manakah Rujukan kepada Objek Disimpan apabila Dicipta pada Tindanan vs. Timbunan?

Di manakah Rujukan kepada Objek Disimpan apabila Dicipta pada Tindanan vs. Timbunan?

Linda Hamilton
Lepaskan: 2024-11-27 01:52:13
asal
934 orang telah melayarinya

Where are References to Objects Stored when Created on the Stack vs. the Heap?

Penciptaan Objek pada Timbunan atau Timbunan:

Timbul persoalan: apabila mencipta objek pada timbunan berbanding timbunan, di manakah rujukan kepada objek yang sebenarnya disimpan?

Dalam C, storan objek ditentukan oleh konteksnya, iaitu penyimpanannya tempoh:

Objek o mencipta objek dengan:

  • Storan automatik: Jika diisytiharkan secara setempat dalam fungsi, objek itu berada pada timbunan.
  • Statik storan: Jika diisytiharkan pada ruang nama atau skop fail, objek diletakkan dalam kawasan memori khusus di luar tindanan atau timbunan.
  • Pembolehubah ahli: Jika diisytiharkan sebagai subobjek dalam objek lain, ia mewarisi storan objek yang mengandungi tempoh.

Objek* o mencipta penuding dengan storan automatik.

Penunjuk diperuntukkan pada tindanan seperti objek lain. Tempoh storan mereka ditentukan oleh konteksnya, bukan oleh ungkapan permulaan.

Sebagai contoh, dalam serpihan kod di bawah:

struct Foo {
    Object o;
};

Foo foo, f;
Foo* p = new Foo;
Foo* pf = &f;
Salin selepas log masuk
  • foo.o mempunyai storan statik, tidak juga pada tindanan mahupun timbunan, kerana foo sendiri mempunyai storan statik.
  • f.o mempunyai storan automatik, berada pada tindanan kerana f mempunyai storan automatik.
  • p->o mempunyai storan dinamik, pada timbunan kerana *p mempunyai storan dinamik.
  • pf->o dan f.o merujuk kepada objek yang sama kerana ke pf menunjuk terus ke f.

Ringkasnya, lokasi storan objek bergantung semata-mata pada konteksnya, manakala penunjuk sentiasa diperuntukkan pada tindanan tetapi boleh merujuk objek pelbagai tempoh storan.

Atas ialah kandungan terperinci Di manakah Rujukan kepada Objek Disimpan apabila Dicipta pada Tindanan vs. Timbunan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan