PDA

Visualizza la versione completa : [C++] Allocazione variabile "static"


denis76
08-10-2006, 12:05
Scusate la domanda banale ma ho alcuni dubbi.

Poniamo la funzione



char* ToString() {
static char riga[128];
return riga;
}


Mi pare di capire che "riga", in quando dichiarata come "static", rimane allocata alche dopo il termine della funzione.
Se io invoco n volte quella funzione "riga" sarà sempre allocata nello stesso posto oppure sarà allocata in punti diversi della memoria con spreco di ram?

Grazie mille, Denis.

oregon
08-10-2006, 12:27
Se fosse allocata ad ogni chiamata, non sarebbe piu' static ...

andbin
08-10-2006, 14:30
Originariamente inviato da denis76
Se io invoco n volte quella funzione "riga" sarà sempre allocata nello stesso posto oppure sarà allocata in punti diversi della memoria con spreco di ram?Viene allocata 1 volta sola all'inizio del programma e ad 1 indirizzo che rimane fisso per tutta la durata del programma. Però quella variabile è visibile solo all'interno della funzione.

Il problema dell'utilizzo di una variabile static in quel modo è che la funzione non può essere usata in maniera "concorrente". Non deve essere chiamata contemporaneamente da più thread, non è "rientrante" e il valore ritornato deve essere usato "subito".

Mi spiego meglio:

char *a, *b;

a = ToString ();
b = ToString ();
In questo caso, a e b puntano (ovviamente) alla stessa locazione, ma il contenuto è solo quello impostato dall'ultima chiamata (dipende ovviamente da cosa ci scrive la funzione!).

Se usare o meno una variabile static in quel modo, dipende da te e da cosa devi fare.

alka
08-10-2006, 14:40
[C/C++] Domanda da novellino.
Usa titoli più significativi, che descrivano il contenuto della domanda, non il livello (la cui valutazione è peraltro soggettiva).

Ciao! :ciauz:

denis76
08-10-2006, 15:09
public:
Grazie mille, sei stato molto chiaro.

private:
Appunto mentale: ricordarsi di definire titoli in modo più significatico altrimenti il Moderatore si in....a!

Loading