Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. 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.


... sei un proxy che perde i pacchetti ...
PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2763
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. }



Ingegnere Informatico
https://ldlagency.it
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 ...


Yep, I came back :P
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!


... sei un proxy che perde i pacchetti ...
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
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 ...
PM Quote