Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    32

    [C]Calcolare la dimensione degli elementi effettivi presenti in una struttura

    Salve ,
    ho questa struttura:

    codice:
    struct stringpool {
                      int identifiers[100];
                      char strings[100][100];
                      int foundPos;
                      enum error {SUCCESS,KO_DUPLICATE_FOUND,KO_NULL_STRING,
                                       KO_FULL_POOL,ID_NOT_VALID,ID_NOT_FOUND,KO_DUPLICATE_FILE,
                                       KO_NO_DATA,KO_FILE_NOT_EXIST};  
                      }sp;
    E dovrei calcolarne la dimensione in byte degli elementi effettivamente presenti all'interno della struttura poichè, in base al resto del codice, i vettori all'interno della struttura non vengono necessariamente riempiti tutti.
    Quindi ho fatto così:

    codice:
    for (i = 0;
          i < dim_str;
          i++){
               if (sp.identifiers[i] != -1){
                   l = l + 1;
               }
     }         
     size_ide = sizeof (int) * l;
     
     for (i = 0;
          i < dim_str;
          i++){
               for (j = 0;
                   j < dim_str;
                   j++){
                        if (sp.strings[i][j] != NULL){
                           n = n + 1; 
                        }                 
               }
     }   
     size_str = sizeof (char) * n;
    Così ho la dimensione degli elementi in identifiers e strings, è corretto?

    Poi visto che in sp ci sono anche altri elementi che dovrei conteggiare mi basterebbe sommare i seguenti:
    codice:
    sizeof(sp.foundPos)
    sizeof(enum error)
    a size_str e size_ide o non è corretto?

    Mi è sorto il dubbio perchè la dimensione di foundPos mi risulta 4 e quella di enum error anche. Però in totale sp è 10404 con 10000 per i char e 400 per int, qunindi non mi trovo con i conti e credo che sbaglio qualcosa...

    che ne dite?

    Grazie a tutti in anticipo.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Intanto l'enum non occupa spazio in quanto sono solo delle costanti usate a compile time e non delle variabili utilizzate a runtime. Questo fatto fa tornare i conti a posto perche' hai considerato 4 byte in piu' che non esistono.

    Sul codice che hai mostrato non si puo' dire molto ...

    Si deve supporre che

    dim_str

    sia il numero di elementi e che -1 voglia dire che l'elemento non e' utilizzato (così come NULL per le stringhe) ...

    Riscritto in modo che si comprenda meglio (quelle for non si possono leggere ...) e con qualche riga aggiunta in rosso ...

    codice:
    l = 0;
    for (i=0;  i<dim_str; i++)
       if (sp.identifiers[i] != -1)
          l++;
    
    size_ide = sizeof(int) * l;
     
    n = 0;
    for (i=0; i<dim_str; i++)
       for (j=0; j<dim_str; j++)
          if (sp.strings[i][j] != NULL)
            n++;
    
    size_str = sizeof(char) * n;
    P.S. Lawliet ...?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    32
    Si scusami, ho dimenticato di specificare cosa fosse dim_str, e si, è il numero di elementi che si vogliono inserire nella struttura. Sono corrette le tue supposizioni

    Quindi per sapere la dimensione totale mi basta sommare le dimensioni dei vettori presenti nella struttura, senza contare l'enum, giusto?

    P.S: Lawliet???

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da AuéIC
    Quindi per sapere la dimensione totale mi basta sommare le dimensioni dei vettori presenti nella struttura, senza contare l'enum, giusto?
    Per "dimensione totale" ora cosa intendi?

    Comunque, ti ripeto, l'enum NON occupa spazio ... anzi, sarebbe meglio che non fosse scritta all'interno della struct ma esternamente ...

    P.S: Lawliet???
    Ho gia' risposto a questa domanda su un altro forum ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    32
    Originariamente inviato da oregon
    Per "dimensione totale" ora cosa intendi?

    Comunque, ti ripeto, l'enum NON occupa spazio ... anzi, sarebbe meglio che non fosse scritta all'interno della struct ma esternamente ...
    Cioè la dimensione di tutti dati presenti all'interno della struttura...
    ho fatto così:
    codice:
     size = sizeof(sp.foundPos) + size_str + size_ide;
    Ho gia' risposto a questa domanda su un altro forum ...
    quale forum? :master:

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da AuéIC
    size = sizeof(sp.foundPos) + size_str + size_ide;
    Sì ... corretto ...

    quale forum? :master:
    pierotofy
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    32
    Originariamente inviato da oregon
    Sì ... corretto ...



    pierotofy
    non lo conosco, ho messo solo quì questa domanda, probabilmente mi stai scambiando per un altro

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 © 2025 vBulletin Solutions, Inc. All rights reserved.