Pelaksanaan asas peruntukan dan pemusnahan memori fungsi C++ adalah seperti berikut: Peruntukan memori: Panggil operator baharu untuk memperuntukkan bingkai tindanan pada tindanan dan menyimpan pembolehubah setempat serta maklumat panggilan fungsi. Kemusnahan memori: Apabila fungsi kembali, lepaskan bingkai tindanan dan pembolehubah setempat yang disimpannya, panggil operator padam untuk melepaskan memori yang diperuntukkan oleh baharu.
Apabila fungsi dipanggil, ia memerlukan bingkai tindanan untuk menyimpan pembolehubah setempat dan maklumat panggilan fungsi. Bingkai tindanan ialah kawasan memori yang diperuntukkan pada tindanan apabila fungsi dipanggil.
Dalam C++, memori diperuntukkan oleh operator baharu
. Operator baharu
mengembalikan penunjuk ke memori yang diperuntukkan. new
操作符分配的。new
操作符返回一个指向分配内存的指针。
int* p = new int; // 分配一个 int 变量
当函数返回时,它的栈帧被释放。这也会释放栈帧中存储的局部变量。
C++ 中的内存是由 delete
操作符释放的。delete
操作符释放由 new
分配的内存。
delete p; // 释放之前分配的 int 变量
考虑以下代码段:
void foo() { int* p = new int; *p = 10; return; } int main() { foo(); return 0; }
在这个例子中,foo
函数分配一个 int
变量并将其值设置为 10。当 foo
函数返回时,p
所指向的内存会被释放。
但是,main
函数中没有释放 p
所指向的内存。这会导致内存泄漏。
为了解决这个问题,可以在 main
函数中调用 delete
操作符来释放 p
int main() { foo(); delete p; // 释放 foo() 中分配的内存 return 0; }
delete
. Operator delete
mengeluarkan memori yang diperuntukkan oleh new
. 🎜rrreee🎜Contoh Praktikal🎜🎜Pertimbangkan coretan kod berikut: 🎜rrreee🎜Dalam contoh ini, fungsi foo
memperuntukkan pembolehubah int
dan menetapkan nilainya kepada 10. Apabila fungsi foo
kembali, memori yang ditunjuk oleh p
akan dikeluarkan. 🎜🎜Walau bagaimanapun, memori yang ditunjuk oleh p
tidak dikeluarkan dalam fungsi utama
. Ini boleh menyebabkan kebocoran ingatan. 🎜🎜Untuk menyelesaikan masalah ini, anda boleh memanggil operator delete
dalam fungsi main
untuk melepaskan memori yang ditunjuk oleh p
. 🎜rreeeeAtas ialah kandungan terperinci Bincangkan pelaksanaan asas peruntukan dan pemusnahan memori fungsi C++. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!