Alan_Reloaded ha scritto:
Dipende da dove lo allochi. Se lo dichiari come una variabile locale nel corpo di una funzione (esempio, dichiari "char vec[100] ;") il vettore viene posto sullo stack, che bisogna pensare avere un ordine di grandezza dei kbytes. In caso venga sforata la dimensione si provoca l'errore di stack overflow che è sempre una grana e porta generalmente al crash del programma. Se nella stessa funzione di cui sopra lo dichiari "static char vec[100000];" oppure come globale verrà allocato nella RAM disponibile, così come se lo crei tramite la famiglia "malloc" e soci. In questi casi il limite è la RAM ed eventualmente il file di swap, ma parliamo di numeri assolutamente "di principio".
Rileggendo la tua risposta mi viene una serie di dubbi...
1) Quindi conviene dichiarare i vettori nel corpo delle funzioni così, andando nelo stack, l'esecuzione del codice sarà più veloce, giusto? Ma in questo caso il vettore "sparirebbe" appena termina la funzione che lo ha chiamato, vero?
2) Se voglio evitare l'errore di stack overflow dovrei, però, sapere esattamente la dimensione di stack disponibile sulla mia macchina e la dimensione del vettore. C'è modo di saperli? (ho provato cat /proc/cpuinfo ma non mi è sembrato utile)