Ci sarà una differenza di tempo di elaborazione o di memoria tra una funzione membro della classe e una funzione globale

2

Sto scrivendo un programma di simulazione della rete neuronale e ogni operazione o byte aggiuntivo per neurone si riduce in modo folle. Preferisco il linguaggio C ++ come linguaggio rispetto agli altri, ma ora mi chiedo se la struttura della classe richiede spazio aggiuntivo o risorse dopo la compilazione rispetto a C, ad esempio. Se ho un:

class Neuron{
float some,variables,foo,bar;
//And some functions to compute the changes
void foo();
void bar();
}

sarà più snello avere un:

struct Neuron{
float some,variables,foo,bar;
}
void foo(Neuron*);
void bar(Neuron*);

o è lo stesso dopo la compilazione?

    
posta petko10 29.10.2014 - 12:40
fonte

2 risposte

6

Se non si utilizzano funzioni virtuali, non ci dovrebbero essere prestazioni (negative) o impatto spaziale sull'uso delle classi C ++ quando si confrontano con le strutture C. I due snippet che hai fornito come esempio dovrebbero compilare (quasi) lo stesso codice assembly. 1

Se aggiungi funzioni virtuali alle tue classi, allora ci sarà un leggero sovraccarico di memoria per oggetto (circa la dimensione di un puntatore) e un sovraccarico di tempo per chiamata a una funzione virtuale, perché la chiamata deve passare attraverso una spedizione tavolo. Sarà anche un salto indiretto, che potrebbe essere leggermente più costoso su alcune architetture di processore (nell'ordine di alcuni cicli di clock).

Nota 1: il compilatore può utilizzare un metodo diverso per passare il parametro implicito this rispetto a quello utilizzato per gli altri parametri, ma tale differenza è nell'ordine di scegliere il registro A anziché B o passare in un registro invece che in pila.

    
risposta data 29.10.2014 - 13:05
fonte
-2

Se ricordo bene tutto il globale sarà scritto su link sul segmento di dati non inizializzato.

La sezione membro della funzione di classe sarà presente solo se hai creato una nuova istanza della classe. Quindi sarà immagazzinato nell'heap.

Quindi penso che la funzione globale sia più veloce della funzione membro della classe.

Per me scegliere un indirizzo globale è più veloce di chiedere un primo indirizzo di memoria (oggetto) per guardare se contiene un altro indirizzo di memoria (membro).

    
risposta data 29.10.2014 - 13:33
fonte

Leggi altre domande sui tag