Newsgroup: it.comp.lang.c++
Titolo: Funzione proprie in linea. Boh ?

Ciao,
quando possiamo parlare di funzioni proprie in linea ? Sto leggendo lo
Stroustrup e questo punto non mi e` per niente chiaro.
Non ho capito cosa si va ad ottimizzare ponendo inline.
Penso che definendo una funzione all'interno dell classe ( e quindi se
ho capito bene implicitamente inline) il codice generato per quella
classe contiene gia` la parte dati della funzione ? Ma questo non e`
gia` quello che accade normalmente ?
Per la cronaca, sono a pagina 165 del "Il linguaggio C++" di
Stroustroup, 2^ edizione.
Thanks, Max
--
-------------------------------
Maxmilian Grillo
Work like you don't need money,
Love like you've never been hurt,
And dance like no one's watching
--------------------------------

gia` quello che accade normalmente ?
Che significa "la parte dati della funzione" ?
Tieni presente, comunque, che "inline" e' solo un consiglio per il
compilatore, che puo' essere accettato o meno.
--
Andrea Laforgia (ICQ 87230455)
"A C program's trick is sometimes a C++ program's trap"
                                          [S.B.Lippman]

 Thanks, Max
Leggendo il Lipmann III Edizione mi è sembrato di capire che l'utilizzo deli
metodi inline
dia un incremento in prestazioni. In pratica quando il compilatore incontra
una funzione di questo tipo la espande in quel punto (è come se avvenisse
una specie di copia e incolla del codice della funzione) evitandone la
chiamata.
Fatemi spere se dico fesserie, ciao.

Non ho capito cosa si va ad ottimizzare ponendo inline.
La velocità del programma, in quanto il codice delle funzioni inline
viene ripetuto ogni qualvolta vengono usate, ma per contro c'é il
rischio di aumentare le dimensioni dell'eseguibile.
Il Ghenio
-----------
LOVELY SARA
Dal lunedi'al venerdi'su Italia Uno alle 8:10
Non perdetevelo...
-----------

chiamata.
Che non e' pero' da prendere come una certezza.
Il compilatore ha sempre la gestione assoluta delle sue
ottimizzazioni.


 rischio di aumentare le dimensioni dell'eseguibile.
+ grande è l'eseguibile, + c'è probabilità di cache missing... io non
sono ancora del tutto convinto che allineare una funzione porti dei
benefici così notevoli a lungo andare.

 porti dei benefici così notevoli a lungo andare.
Il punto è trovare l'equilibrio. Ovvio, se espando inline una funzione
che genera 1Kb di codice per 10 volte di fila, ed ammesso che il
compilatore sia così tollerante da lasciarmelo fare, allora
l'espansione sta facendo danni.

 benefici così notevoli a lungo andare.
Dipende molto dalla funzione. Metodi di accesso o modifica a singoli
attributi e funzioni che si limitano a istradare la chiamata su altre
funzioni sono casi in cui si puo' stare sostanzialmente certi del
vantaggio, anche in termini di dimensione del codice, e sono casi molto
comuni.
Ciao,
Nicola

 l'espansione sta facendo danni.
questo è un caso direi limite, e penso si possa tranquillamente dire
che il compilatore è scabbione se mi permetta una cosa del genere...
ma per esempio il Pentium II ha 16 KB di cache per il codice e altri
16 KB per i dati. Uscire da questo limite è tutt'altro che difficile
(anzi, è il rimanervi il difficile), e mi sono convinto che è meglio
avere una piccola funzione nella cache e chiamarla ogni volta via call
(non l'anticalcare, l'istruzione asm :-))) che non generare il codice
inline. Purtroppo non ho molti dati per confermare la mia ipotesi, ma
visto che prossimamente ho un po' di tempo libero, voglio fare qualche
prova.

 comuni.
intendi qualcosa del genere?
inline int f()
int g();
int f()
{    return g()+1;}
beh, qui sono senz'altro d'accordo con te...

Intendo addirittura
class A {
  public:
    void setF (int f) { myF = f; }
    int getF() { return myF; }
  private:
    int myF;
};
class B {
  public:
    B(A & a) myA(a) {}
    int getF() { return myA.getF(); }
  private:
    A & myA;
};
Ciao,
Nicola