Menentukan Saiz Tatasusunan Selepas Peruntukan Dinamik dalam C
Dalam C , tatasusunan yang diperuntukkan secara dinamik menggunakan operator baharu tidak secara semula jadi mendedahkan saiznya secara pengaturcaraan. Soalan ini timbul daripada pemerhatian bahawa padam[] mesti mengetahui saiz tatasusunan yang diperuntukkan untuk mengagihkan memori dengan berkesan.
Mengapa Tiada Fungsi Terbina dalam untuk Mendapatkan Saiz Tatasusunan?
Tidak seperti tatasusunan yang diisytiharkan pada tindanan, yang saiznya boleh ditentukan menggunakan sizeof(), saiz tatasusunan yang diperuntukkan secara dinamik tidak diketahui semasa penyusunan. Ini kerana masa jalan atau pengurus memori sistem pengendalian menguruskan memori yang diperuntukkan, bukan pengkompil. sizeof() beroperasi sebagai pemalar masa kompilasi dan tidak boleh menilai secara dinamik saiz tatasusunan yang diperuntukkan secara dinamik.
Strategi Alternatif
Walaupun C tidak menyediakan terbina dalam fungsi untuk mendapatkan saiz tatasusunan, terdapat pendekatan alternatif:
int *arr = new int[256]; int *p = &arr[100]; int size = p - arr; // Subtracting pointers yields the size
Implikasi
Ketiadaan cara piawai untuk menentukan saiz tatasusunan yang diperuntukkan secara dinamik dalam batang C daripada tumpuan bahasa pada fleksibiliti pengurusan memori dan kebebasan platform. Walaupun ia memberikan pengehadan dalam senario tertentu, ia juga membenarkan strategi pelaksanaan yang pelbagai dan peluang pengoptimuman.
Atas ialah kandungan terperinci Bagaimanakah Anda Boleh Menentukan Saiz Tatasusunan Yang Diperuntukkan Secara Dinamik dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!