2010-08-15 15 views
5

Supponiamo di aver scritto un programma in C++ senza utilizzare RTTI e il polimorfismo di run-time (nessuna funzione virtuale, nessuna ereditarietà virtuale) e le classi non hanno membri privati ​​/ protetti, anche i file di intestazione specifici di C++ non vengono utilizzati (es. Vengono utilizzati i file di intestazione C: cstring, cstdio, ... anziché string, iostream, ...).Un programma C++ è molto più lento di un programma C simile?

Quindi voglio scrivere un programma simile in C che il primo tipo di argomento delle funzioni corrisponda al relativo struct.

Ad esempio:

//C++ code 

struct Custom 
{ 
    int a; 
    Custom() { } 
    void change() { } 
    ~Custom() { } 
}; 

int main() 
{ 
    Custom m; //init m 
    m.change(); 
    //destroy m 
} 

/*C code*/ 

struct Custom 
{ 
    int a; 
}; 
void custom_init(Custom* like_this) { } 
void custom_change(Custom* like_this) { } 
void custom_destroy(Custom* like_this) { } 

int main() 
{ 
    Custom m; 
    custom_init(&m); 
    custom_change(&m); 
    custom_destroy(&m); 
} 

è il programma C++ più lento rispetto al programma C simile (in genere)? se sì, perché i programmi C sono più veloci di allora? Lo so, il linguaggio C++ utilizza il modello di progettazione RAII per la gestione della memoria, è la ragione del lento?

Ho sentito dire che alcune persone hanno affermato che i programmi C sono più veloci ... perché?

Modifica: Perché questa domanda è chiusa? volevo sapere se C++ fa qualcosa in più di cui non abbiamo bisogno e come influenza le prestazioni (rende più lento? più veloce? o nulla?).

+1

La risposta dipenderà dal compilatore/piattaforma/hardware. Basta compilare entrambi i programmi, punto di riferimento. Inoltre, in alcuni casi, la probabilità di causare accidentalmente un avvitamento potrebbe non valerne la velocità aggiuntiva. – SigTerm

+6

Non chiudere. Non ti offendere ogni volta che qualcosa è paragonato a C. Vorrei per uno piacere sapere se ci sono situazioni in cui questo è il caso. –

+0

Divertente che tu abbia sentito C è più veloce del C++, perché sono entrambi una vista dannatamente più veloce di qualsiasi altra cosa che tra loro sono piselli e fagioli. –

risposta

6

C++ non utilizza RAII. È CAN utilizzare RAII nel programma C++.
Finché si sta facendo esattamente la stessa cosa in C++ e in C, entrambi i programmi dovrebbero essere altrettanto veloci.
Scrivere programmi veloci in C o C++ non è una questione di linguaggio di programmazione, ma di quale tipo di funzione usi.

+1

Se non usiamo i puntatori, come la variabile 'm' nell'esempio precedente, C++ usa RAII per allocare e liberare la sua memoria (quando si verifica un errore nel costruttore, la memoria allocata verrà liberata) (e se un errore si verifica dopo l'inizializzazione della classe, il distruttore verrà chiamato automaticamente). –

+1

@ PC2st Solo perché funziona LIKE RAII non significa che sia RAII. – SoapBox

+1

@ PC2st Quando dici che si verifica un errore, vuoi dire se viene lanciata un'eccezione giusta? Significa che stai utilizzando una funzione aggiuntiva che non avresti usato in C. Se vuoi che il confronto sia significativo, non devi usare l'eccezione, o implementare la gestione delle eccezioni in C. – log0

2

No, è quasi certamente falso. RAII da solo non renderà più lento il programma. Entrambi i compilatori C e C++ probabilmente genererebbero codice quasi identico per questi esempi.

4

Non lo saprai mai fino a quando non ci proverai. Se il C++ utilizza qualcosa che C non (come costruttori, distruttori e persino metodi non virtuali), lo può essere più lento a.

Ma la differenza sarà probabilmente così piccola da essere impercettibile.

Le implementazioni anticipate di C++ potrebbero essere state più lente di C ma questa è la natura di qualsiasi software. Migliora col tempo

Misura, non indovinare! Profili il tuo codice specifico per vedere quale è più veloce. Ma anche se il codice C è più veloce, il prezzo di perdere tutte le funzionalità aggiuntive potrebbe essere eccessivo. La velocità di esecuzione è solo una velocità, e raramente quella importante. Il mio parere di quale velocità è la più importante è la velocità di sviluppo.

+0

Grazie per la tua risposta, ma voglio sapere se C++ fa qualcosa in più di cui non abbiamo bisogno, e come influisce sulle prestazioni (rende più lento? O niente?). ad esempio, RAII fa ciò che rende più lento il C++? (o potrebbe non) e altre cose che possono fare C++ per renderlo più lento di C (o non). –

+0

@ PC2st, se vuoi saperlo, prova questo. Dipenderà dall'implementazione. Potrei facilmente scrivere un compilatore C che genera codice più lento di g ++ (che in realtà è probabile poiché, in base all'output dell'assembler, i ragazzi di g ++ sono molto più informati sull'ottimizzazione di me). Crikey, potrei scrivere un compilatore C il cui codice è più lento di GWBASIC :-) A meno che non si paragoni _specifiche implementazioni_ (in modo che i dati reali possano essere raccolti piuttosto che gli aneddoti delle persone), la domanda sembra priva di significato. – paxdiablo

Problemi correlati