Qual è stato il ragionamento alla base della non memorizzazione esplicita della lunghezza di un array con un array in C
?
Per come la vedo io, ci sono ragioni schiaccianti per farlo, ma non molti a supporto dello standard (C89). Per esempio:
- La disponibilità della lunghezza in un buffer può impedire il sovraccarico del buffer.
- Uno stile Java
arr.length
è chiaro ed evita al programmatore di mantenere molteint
s nello stack se si occupa di più array - I parametri di funzione diventano più convincenti.
Ma forse la ragione più motivante, secondo me, è che di solito nessuno spazio viene salvato senza mantenere la lunghezza. Mi azzarderei a dire che la maggior parte degli usi degli array implica allocazione dinamica. È vero, ci possono essere alcuni casi in cui le persone usano un array allocato nello stack, ma questa è solo una chiamata di funzione *: lo stack può gestire 4 o 8 byte in più.
Poiché il gestore heap deve tenere traccia della dimensione del blocco libero utilizzata dall'array allocato in modo dinamico, perché non rendere utilizzabili tali informazioni (e aggiungere la regola aggiuntiva, verificata al momento della compilazione, che non si può manipolare esplicitamente la lunghezza a meno che non si vorrebbe piace spararsi al piede).
L'unica cosa che mi viene in mente sul lato opposto è che nessun inseguimento lunghezza può aver fatto compilatori più semplice, ma non che molto più semplice.
* Tecnicamente, si potrebbe scrivere una sorta di funzione ricorsiva con un array con memorizzazione automatica, e in questo caso (molto elaborato) l'archiviazione della lunghezza può effettivamente comportare un maggiore utilizzo dello spazio.
malloc()
possibile richiedere le dimensioni di un'area ed in modo portatile?" Questa è una cosa che mi fa meravigliare più volte.