Pagina 1 di 1

[array statici con elementi static] RISOLTO

Inviato: martedì 7 marzo 2017, 9:54
da astrifiammante
Salve a tutti. Avrei una curiosità da chiedervi inerente alla programmazione in c++. Mi è capitato in un programma di dover definire un array statico, i cui elementi dovrebbero essere variabili statiche la cui dimensione l'ho definita come variabile globale, ovvero:

Codice: Seleziona tutto

 
int dim = 10;
....................

void function
{
     static int array[dim];
...............
}

int main()
{
...........
}
Il compilatore mi da errore dicendomi che la dimensione del vettore (statico) non è costante, ovvero da come ho capito la dimensione dell'array statico viene stabilita a run time invece che a compile time. Se nel codice sopra levo lo spec. static tutto fila liscio. Ora so che la soluzione immediata è lavorare con array dinamici, ma non riesco a capire perchè nel caso usi static sorge un errore di run time, mentre quando tolgo static siamo esattamente in compile time. PS: per ovviare a tale inconveniente ho provato a introdurre la dimensione con un define oppure definendo const int dim = 10 e in tali casi fila liscio. Non riesco a capire il perchè in un caso siamo in run time e e nell'altro in compile time

Re: array statici con elementi static

Inviato: martedì 7 marzo 2017, 14:00
da ixamit
Un'allocazione statica e' sempre compile time, inizializzata a zero sullo storico segmento bss.
Togliendo la keyword static l'allocazione locale del tuo esempio avviene a run time nello stack.

Se devi allocare un vettore statico devi usare delle costanti (non le keyword const)

Codice: Seleziona tutto

static int foo[10];
 .... oppure ....
#define DIM 10
static int foo[DIM];

Codice: Seleziona tutto

$ objdump -x a.out | grep foo
0000000000201040 l     O .bss	0000000000000028              foo.2874

Re: array statici con elementi static

Inviato: martedì 7 marzo 2017, 18:13
da astrifiammante
ti ringrazio ixamit per il chiarimento

Re: [array statici con elementi static] RISOLTO

Inviato: martedì 7 marzo 2017, 20:31
da Mdfalcubo
il tag va messo al risolto, non al titolo...modifica per favore...
[Risolto] TITOLO DEL POST