Array Bersaiz Pembolehubah pada Tindanan: Menyahpasang Mitos Pengaturcaraan
Konsep tatasusunan dengan saiz yang ditentukan pada masa jalan telah lama dianggap sebagai tabu pengaturcaraan, terutamanya dalam C . Kebijaksanaan umum menentukan bahawa hanya pemalar boleh menentukan saiz tatasusunan automatik dan statik. Walau bagaimanapun, coretan kod terbaharu mencabar tanggapan ini.
Pertimbangkan kod berikut:
int main(int argc, char **argv) { size_t size; cin >> size; int array[size]; ... }
Walaupun ketiadaan pengendali peruntukan memori dinamik seperti baru atau malloc, kod ini menyusun dan berjalan tanpa kesilapan. Bagaimanakah ini boleh berlaku?
Kuncinya terletak pada standard C99, yang memperkenalkan sokongan untuk tatasusunan bersaiz berubah-ubah pada tindanan. Dalam kes ini, pengkompil memperuntukkan tatasusunan pada tindanan secara dinamik, sama seperti tatasusunan bersaiz malar yang diisytiharkan sebagai tatasusunan int[100].
Adalah penting untuk ambil perhatian bahawa ini pada asasnya berbeza daripada peruntukan timbunan menggunakan malloc atau baru. GCC, khususnya, memperuntukkan tatasusunan pada tindanan, mengubah suai penuding tindanan dengan sewajarnya. Ini menghapuskan keperluan untuk peruntukan timbunan dan menyerupai gelagat fungsi _alloca.
Walaupun binaan ini tidak disokong dalam pengkompil yang lebih lama, ia semakin berleluasa dalam pelaksanaan C moden. Ia menyediakan cara yang mudah dan cekap untuk memperuntukkan tatasusunan dengan saiz yang diketahui pada masa jalan.
Atas ialah kandungan terperinci Bolehkah Tatasusunan Bersaiz Boleh Ubah Diperuntukkan pada Tindanan dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!