Bir dizinin uzunluğunu bir dizinin içindeyken açıkça depolamamanın arkasındaki neden C
neydi?
Gördüğüm gibi, bunu yapmanın çok zor nedenleri var ama standardı desteklemiyor (C89). Örneğin:
- Tamponda uzunluğun mevcut olması, tamponun taşmasını önleyebilir.
- Bir Java stili
arr.length
hem açıktır hem de programcınınint
birkaç dizi ile ilgileniyorsa yığın üzerinde birçok s bulundurma zorunluluğunu önler - Fonksiyon parametreleri daha uyumlu hale gelir.
Ancak, belki de en motive edici sebep, bence, genellikle, uzunluğunu muhafaza etmeden yer kazanmamasıdır. Dizilerin çoğu kullanımının dinamik tahsisat içerdiğini söylemeye teşebbüs ediyorum. Doğru, insanların yığında tahsis edilen bir diziyi kullandığı bazı durumlar olabilir, ancak bu yalnızca bir işlev çağrısı * olabilir - yığın 4 veya 8 bayt fazlalık işleyebilir.
Yığın yöneticisi, dinamik olarak tahsis edilen dizinin kullandığı boş blok büyüklüğünü yine de izlemek zorunda olduğundan, neden bu bilgiyi kullanılabilir kılmayalım (ve derleme zamanında kontrol edilen ek kuralı ekleyelim, bir tane uzunluğa kadar uzunluğu değiştiremez) kendini ayağından vurmak gibi).
Diğer tarafta düşünebildiğim tek şey, hiçbir uzunluk izlemenin derleyicileri daha basit hale getirmemiş olabileceği , ancak bu kadar basit hale getiremeyeceğidir .
* Teknik olarak, otomatik depolama dizisine sahip bir dizi özyinelemeli işlev yazılabilir ve bu (çok ayrıntılı) durumda, uzunluğu depolamak gerçekten de daha fazla alan kullanımıyla sonuçlanabilir.
malloc()
alanın boyutu taşınabilir bir şekilde istenemiyor?" Bu beni birkaç kez merak ettiren bir şey.