Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Puntatori...
Forum - C/C++ - Puntatori...

Avatar
tasx (Dev Team)
Expert


Messaggi: 439
Iscritto: 15/12/2008

Segnala al moderatore
Postato alle 19:50
Lunedì, 03/10/2011
Ciao a tutti!!

Ho un dubbio:
se una funzione accetta come parametro un puntatore ad una struttura, e la struttura è molto grande(contiene puntatori a tante altre strutture) non dovrebbe peggiorare le prestazioni del programma, giusto?

Dopotutto passo solo un puntatore(4 byte), è così che funziona?
Perchè per quello che ne so io, quando viene chiamata una funzione prima tutti gli argomenti vengono allocati nello stack, quindi se passo un puntatore non dovrei avere problemi?

E' corretto vederla così?

Grazie mille ciaociao

ps: se per caso ho scritto qualche baggianata fatemelo notare pure.

PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 20:09
Lunedì, 03/10/2011

Quello che hai scritto è verissimo.
Passare una grossa struttura tramite puntatore ad una funzione è un modo molto furbo per migliorare le prestazioni. Il puntatore ha la dimensione di intero dell'architettura (4 byte per x86 e 8 byte per x64), e non dipende dalla dimensione della struttura stessa.

se poi vuoi anche impedire che la funzione possa modificare il puntatore, fai così:

Codice sorgente - presumibilmente C/C++

  1. void func(const mystruct *p) {
  2.  // body
  3. }


PM Quote
Avatar
Pitagora (Member)
Expert


Messaggi: 367
Iscritto: 12/06/2010

Segnala al moderatore
Postato alle 20:43
Lunedì, 03/10/2011
Testo quotato

Postato originariamente da HeDo:

http://www.possibility.com/Cpp/const.html



Perché uscire fuori, quando abbiamo materiale anche all'interno del sito? http://www.pierotofy.it/pages/guide_tutorials/CPlusPlus/Us ...

PM Quote
Avatar
tasx (Dev Team)
Expert


Messaggi: 439
Iscritto: 15/12/2008

Segnala al moderatore
Postato alle 22:00
Lunedì, 03/10/2011
E invece per l'accesso ai dati?
esempio:

Codice sorgente - presumibilmente Plain Text

  1. printf("string: %s\n", m->a->b->c->d->e->f); // ho un po' esagerato



anche questo non influisce in modo negativo sulle prestazioni?

ciao grazie!

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 23:29
Lunedì, 03/10/2011
Testo quotato

Postato originariamente da tasx:

E invece per l'accesso ai dati?
esempio:

Codice sorgente - presumibilmente Plain Text

  1. printf("string: %s\n", m->a->b->c->d->e->f); // ho un po' esagerato



anche questo non influisce in modo negativo sulle prestazioni?

ciao grazie!



Beh ... dipende ... potrebbe peggiorare le prestazioni, ma rispetto a cosa? :-?


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote