Se io ho un array di 10 o di 1000 dichiarato come variabile globale, quando avvio il programma, impiegano lo stesso tempo a inizializzarsi gli array o impiegano tempo diverso?
int Arr[10];
int Arr2[1000];
Se io ho un array di 10 o di 1000 dichiarato come variabile globale, quando avvio il programma, impiegano lo stesso tempo a inizializzarsi gli array o impiegano tempo diverso?
int Arr[10];
int Arr2[1000];
Le variabili con durata "fissa" sono allocate al momento della creazione del processo in una area dati. In pratica all'interno dell'eseguibile c'è scritto che il programma ha bisogno di tot bytes da riservare in questa area dati apposita.Originariamente inviato da Cesaropa12
Se io ho un array di 10 o di 1000 dichiarato come variabile globale, quando avvio il programma, impiegano lo stesso tempo a inizializzarsi gli array o impiegano tempo diverso?
int Arr[10];
int Arr2[1000];
Quindi, per venire alla tua domanda: no, nessuna differenza di tempo.
Ok. Allo stesso modo volevo sapere se utilizzando il vettore si impiega più o meno tempo. Ma credo che qui la risposta sia differente perchè cio' viene fatto in fase di esecuzione visto che il vettore ha un costruttore.
//Codice dichiarato glibalmente
vector<int> Arr(10);
vector<int> Arr2(1000);
Stesso tempo di esecuzione (più o meno ... non so esattamente cosa fa il costruttore di vector). Si tratta solo di allocare più o meno memoria dinamica a run-time.Originariamente inviato da Cesaropa12
Ok. Allo stesso modo volevo sapere se utilizzando il vettore si impiega più o meno tempo. Ma credo che qui la risposta sia differente perchè cio' viene fatto in fase di esecuzione visto che il vettore ha un costruttore.
//Codice dichiarato glibalmente
vector<int> Arr(10);
vector<int> Arr2(1000);
Non ha capito bene il succo ...Le variabili con durata "fissa" sono allocate al momento della creazione del processo in una area dati. In pratica all'interno dell'eseguibile c'è scritto che il programma ha bisogno di tot bytes da riservare in questa area dati apposita.
Vuoi dire che dichiarando array [100] o array [10] non c'è differenza, in termini di tempo ?
Credo di no, cmq si devono riservare quelle celle ... :master:
Cmq:
Essendo un'array più "grande" dell'altro, naturalmente, ci mette più tempo ad essere inizializzato...Se io ho un array di 10 o di 1000 dichiarato come variabile globale, quando avvio il programma, impiegano lo stesso tempo a inizializzarsi gli array o impiegano tempo diverso?
O intendevi dichiarato (il c++, se non erro, non inizializza l'array dichiarato)...
Experience is what you get when you don’t get what you want
Allora, giusto per chiarire:Originariamente inviato da Xaratroom
Vuoi dire che dichiarando array [100] o array [10] non c'è differenza, in termini di tempo ?
oppurecodice:int arr[10]; int main (void) { return 0; }
Non cambia praticamente nulla. la variabile 'arr' viene messa nel segmento "bss" dell'eseguibile che è quello dedicato alle variabili non inizializzate. Se provate a compilare i sorgenti sopra, la dimensione dell'eseguibile non cambia ed è comunque piccola (il minimo, insomma, per il tipo di progetto scelto, se con o senza debugging).codice:int arr[1000000]; int main (void) { return 0; }
Questo perché, per dirla in breve, all'interno dell'eseguibile c'è soltanto scritto che quando il programma verrà caricato in memoria, dovranno essere allocati tot bytes per le variabili non inizializzate.
Ora questo:
Adesso la variabile 'arr' viene messa nel segmento "data" perché è inizializzata. Provate a compilare e vi troverete con un eseguibile parecchio grosso, sicuramente più di 4000000 bytes (intorno ai 4 Megabyte). Questo perché l'intero array è stato allocato in una area di memoria che è fisicamente e realmente presente nel file eseguibile.codice:int arr[1000000] = { 1 }; int main (void) { return 0; }
Spero che sia chiaro, adesso.
Si su questo non ci piove....
Intendevo dire che, in termini di tempo di avvio, l'eseguibile che riserva 1000000 celle è più lento di quello che ne riserva 10 ( non inizializzate )....
A maggior ragione se consideriamo anche l'inizializzazione ....
Experience is what you get when you don’t get what you want
Ho visto una struttura che mi è nuova:
int arr[1000000] = { 1 };
Significa 100000 di elementi di arr inizializzati a 1? Se si è ovvio che in questo caso deve scrivere in ogni cella e ci mette non poco...
Solo il primo elemento...
es:
int arr [100] = {1,2,3,4,5};
arr
1 2 3 4 5 ...
Experience is what you get when you don’t get what you want
Prova:
codice:#include <iostream.h> #include <stdlib.h> int arr [10] = {1,2,3,4,5}; int main (void) { for (unsigned int i = 0; i < 10; i++) cout << arr [i] << endl; system ("pause"); return 0; }
Experience is what you get when you don’t get what you want