Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mengagihkan Semula Memori dengan Berkesan dalam C?

Bagaimana untuk Mengagihkan Semula Memori dengan Berkesan dalam C?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-10 12:11:17615semak imbas

How to Effectively Reallocate Memory in C  ?

Cara Mengagihkan Semula Memori dalam C

Dalam C , peruntukan memori dan deallocation biasanya dikendalikan menggunakan 'baru' dan 'padam'. Walau bagaimanapun, operasi ini tidak menawarkan mekanisme ubah saiz terbina dalam, yang menjadi perlu apabila berurusan dengan data dinamik yang memerlukan ruang tambahan.

Memperkenalkan Penempatan Semula dalam C

Kepada menyelesaikan masalah ini, fungsi 'realloc' biasanya digunakan dalam bahasa lain, tetapi penting untuk diperhatikan bahawa C tidak mempunyai persamaan langsung. Sebaliknya, pengaturcara mempunyai dua pilihan untuk mengubah saiz memori:

Pilihan 1: Menggunakan std::vector

Pendekatan pilihan dalam C ialah menggunakan 'std::vector ' kelas. Ia menyediakan bekas seperti tatasusunan yang fleksibel yang mengurus peruntukan memori dan mengubah saiz secara automatik. Untuk mengagihkan semula memori menggunakan std::vector:

std::vector<Type> t(n, 0);  // Initialize a vector with n elements
t.resize(n2);  // Resize the vector to n2 elements

Pilihan 2: Menggunakan Pengurusan Memori Manual

Untuk senario yang lebih kompleks, teknik pengurusan memori manual boleh digunakan. Coretan kod berikut menunjukkan cara mengagihkan semula memori secara manual menggunakan 'malloc' dan 'memset':

Type* t = (Type*)malloc(sizeof(Type)*n); 
memset(t, 0, sizeof(Type)*m);

Untuk mengubah saiz memori, 'realloc' digunakan, diikuti dengan semakan untuk memastikan pengagihan semula berjaya:

t = (Type*)realloc(t, sizeof(Type) * n2);
if (t == NULL) { /* Error handling */ }

Mengirim Penunjuk kepada a Fungsi

Tidak seperti std::vector, yang mengembalikan rujukan kepada datanya, pendekatan pengurusan memori manual mengembalikan penunjuk. Apabila menghantar penuding ini kepada fungsi, gunakan sintaks berikut:

Foo(&t[0]);

Ini memastikan fungsi menerima penunjuk yang sah kepada elemen pertama tatasusunan.

Kesimpulan

Dengan menggunakan pendekatan pilihan menggunakan std::vector atau melaksanakan teknik pengurusan ingatan manual dengan teliti, C pengaturcara boleh mengagihkan semula memori dengan berkesan untuk menampung saiz data yang berubah-ubah.

Atas ialah kandungan terperinci Bagaimana untuk Mengagihkan Semula Memori dengan Berkesan dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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