2010-05-03 21 views
8

Vorrei sapere come viene gestito un array di lunghezza variabile (quali variabili extra o strutture di dati vengono mantenute nello stack per disporre di array di lunghezza variabile).Array di lunghezza variabile

Grazie mille.

risposta

4

È solo un array di dimensioni dinamiche (dipendente dall'implementazione, ma più comunemente nello stack). È molto simile a alloca ai vecchi tempi, con l'eccezione che sizeof restituirà la dimensione effettiva dell'array, il che implica che la dimensione dell'array deve anche essere memorizzata da qualche parte (anche dipendente dall'implementazione, ma probabilmente anche nello stack)).

+1

Questo non è del tutto vero, perché non c'era modo di interrogare la dimensione di un array 'alloca() dopo che era stato creato, ma' sizeof' funziona su VLAs (quindi se tu chiami 'sizeof' sull'array, quella dimensione deve essere mantenuta da qualche parte). – caf

+0

@caf: buon punto - immagino che anche le dimensioni debbano essere memorizzate da qualche parte (dipende dall'implementazione) quindi - aggiornerò la mia risposta. –

1

La dimensione degli array di lunghezza variabile viene determinata in fase di esecuzione anziché in fase di compilazione.
Il modo in cui viene gestito dipende dal compilatore.
GCC, ad esempio, alloca la memoria nello stack.
Ma non esiste una struttura speciale. È solo un array normale, la cui dimensione è nota in fase di esecuzione.

-2

in alternativa è possibile utilizzare alcuni contenitori, ad es. ArrayList in java o vector in c/C++

+0

-1 non ha nulla a che fare con la domanda (come è possibile implementare una funzionalità di C99). –

Problemi correlati