[C++]Classi con funzioni virtual occupano più memoria

di il
2 risposte

[C++]Classi con funzioni virtual occupano più memoria

Su internet ho letto questo:
Classi che contengono almeno una funzione membro virtual occupano un po' più di spazio delle classi che non ne contengono. Le istanze delle classi che contengono almeno una funzione membro virtual occupano un po' più di spazio (tipicamente, un puntatore ed eventualmente dello spazio di allineamento) e la loro costruzione richiede un po' più di tempo (tipicamente, per impostare tale puntatore) rispetto alle istanze di classi prive di funzioni membro virtual.
Qualcuno saprebbe spiegarmi qualìè il puntatore in questione facendomi capire più che altro se tale "memoria in più" (chè è nell'ordine di qualche byte) è quantificabile con precisione a seconda dei casi? e ,se la risposta è si, come posso fare a quantificarla?inoltre cosa si intende per "spazio di allineamento"?

2 Risposte

  • Re: [C++]Classi con funzioni virtual occupano più memoria

    Allora ti rispondo per quel poco che so. Ogni classe che contiene funzioni virtuali ha una tabella interna che si chiama _vtable (virtual table) dove il compilatore fa i jump neccessari x reperire la funzione viruale all'interno dello spazio della memoria della classe stessa. Non è quantificabile in quanto viene lasciato al compilatore il compito di gestirlo come meglio può. Lo spazio di allineamento e lo spazio tra un _vtable all'altra che deve essere una potenza di 2 (in byte). un po come l'allineamento dei settori nel header PE dei exe. Anche questo viene fatto x questioni di efficenza di esecuzione e reperibiltà dati.
    Da wikipedia:
    http://en.wikipedia.org/wiki/Virtual_method_tabl
  • Re: [C++]Classi con funzioni virtual occupano più memoria

    Grazie mille!...ora è chiaro...
Devi accedere o registrarti per scrivere nel forum
2 risposte