Apabila cuba mengisytiharkan tatasusunan saiz besar, seperti 4200000 gandaan, dalam Dev C , pengguna boleh menghadapi masalah yang tidak dijangka. Walaupun pengkompil mungkin tidak membenderakan ralat, program ini ditamatkan secara tiba-tiba apabila dilaksanakan. Lebih-lebih lagi, kesusahan ini timbul hanya dengan tatasusunan bersaiz besar, manakala dimensi yang lebih kecil berfungsi dengan sempurna.
Walaupun terdapat kelemahan yang wujud dalam memperuntukkan tatasusunan yang begitu besar pada timbunan, permintaan unik simulasi memerlukan akses elemen langsung untuk pengiraan yang cekap. Ini menimbulkan keraguan: bolehkah tatasusunan ini diisytiharkan pada timbunan dengan cara yang memintas halangan yang disebutkan di atas?
Jawapannya, malangnya, adalah tidak. Walaupun mengisytiharkan tatasusunan pada tindanan bukanlah pilihan yang berdaya maju, terdapat penyelesaian yang menggabungkan elemen daripada kedua-dua tindanan dan timbunan:
double *n = new double[4200000];
Dengan menggunakan pendekatan ini, penunjuk n diisytiharkan pada tindanan, manakala memori untuk tatasusunan diperuntukkan pada timbunan. Selepas itu, mengakses n[234] dengan kaedah ini menjadi tidak dapat dibezakan daripada mengakses n[234] dalam tatasusunan yang diisytiharkan seperti berikut:
double n[500];
Untuk prestasi yang dipertingkatkan, vektor boleh digunakan:
std::vector<int> someElements(4200000); someElements[234];
Tambahan pula, vektor adalah lebih selamat dan sama cekap apabila dioptimumkan dengan -O3.
Dengan kaedah alternatif untuk memperuntukkan memori secara dinamik:
double *n = new double[4200000];
Adalah penting untuk mengagihkan memori secara eksplisit:
delete[] n;
Gagal berbuat demikian mengakibatkan kebocoran memori dan potensi ketidakstabilan. Oleh itu, teknik ini sememangnya tidak selamat, terutamanya apabila mengendalikan pengecualian dan kerumitan lain.
Atas ialah kandungan terperinci Bolehkah Tatasusunan Besar Diisytiharkan pada Tindanan dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!