Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    211

    [c++]Tempo inizializzazione variabili globali

    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];

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [c++]Tempo inizializzazione variabili globali

    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];
    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.
    Quindi, per venire alla tua domanda: no, nessuna differenza di tempo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    211
    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);

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    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);
    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.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    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.
    Non ha capito bene il succo ...
    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:
    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?
    Essendo un'array più "grande" dell'altro, naturalmente, ci mette più tempo ad essere inizializzato...
    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

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Xaratroom
    Vuoi dire che dichiarando array [100] o array [10] non c'è differenza, in termini di tempo ?
    Allora, giusto per chiarire:

    codice:
    int arr[10];
    
    int main (void)
    {
        return 0;
    }
    oppure

    codice:
    int arr[1000000];
    
    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).
    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:

    codice:
    int arr[1000000] = { 1 };
    
    int main (void)
    {
        return 0;
    }
    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.

    Spero che sia chiaro, adesso.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    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

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    211
    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...

  9. #9
    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

  10. #10
    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

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.