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!