Rumah > pembangunan bahagian belakang > C++ > Bolehkah Tatasusunan Bersaiz Boleh Ubah Diperuntukkan pada Tindanan dalam C?

Bolehkah Tatasusunan Bersaiz Boleh Ubah Diperuntukkan pada Tindanan dalam C?

Mary-Kate Olsen
Lepaskan: 2024-12-28 00:10:08
asal
797 orang telah melayarinya

Can Variable-Sized Arrays Be Allocated on the Stack in C  ?

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];
    ...
}
Salin selepas log masuk

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!

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