Apa alasan di balik tidak secara eksplisit menyimpan panjang array dengan array C
?
Cara saya melihatnya, ada banyak alasan untuk melakukannya tetapi tidak terlalu banyak mendukung standar (C89). Misalnya:
- Memiliki panjang yang tersedia di buffer dapat mencegah buffer overrun.
- Gaya Java
arr.length
jelas dan menghindari programer dari harus mempertahankan banyakint
s di stack jika berhadapan dengan beberapa array - Parameter fungsi menjadi lebih meyakinkan.
Tapi mungkin alasan yang paling memotivasi, menurut pendapat saya, adalah bahwa biasanya, tidak ada ruang yang disimpan tanpa mempertahankan panjangnya. Saya berani mengatakan bahwa sebagian besar penggunaan array melibatkan alokasi dinamis. Benar, mungkin ada beberapa kasus di mana orang menggunakan array yang dialokasikan pada stack, tapi itu hanya satu panggilan fungsi * - stack dapat menangani tambahan 4 atau 8 byte.
Karena manajer tumpukan harus melacak ukuran blok bebas yang digunakan oleh array yang dialokasikan secara dinamis, mengapa tidak membuat informasi tersebut dapat digunakan (dan menambahkan aturan tambahan, diperiksa pada waktu kompilasi, bahwa seseorang tidak dapat memanipulasi panjang secara eksplisit kecuali jika mau suka menembak diri sendiri di kaki).
Satu-satunya hal yang dapat saya pikirkan di sisi lain adalah bahwa tidak ada pelacakan panjang mungkin telah membuat kompiler sederhana, tapi tidak yang jauh lebih sederhana.
* Secara teknis, seseorang dapat menulis semacam fungsi rekursif dengan array dengan penyimpanan otomatis, dan dalam hal ini (sangat rumit) menyimpan panjang mungkin memang menghasilkan lebih banyak penggunaan ruang secara efektif.
malloc()
area ed dapat diminta dengan cara portabel?" Itu adalah hal yang membuat saya bertanya-tanya beberapa kali.