Newsgroup: it.comp.lang.c++
Titolo: C++ pesante?

Scommetto che questa č la domanda piů fritta e rifritta della storia: anche
ottimizzando al meglio il codice, il C++ non appesantisce anche di poco le
applicazioni?
Espongo il mio problema: sono intenzionato a scrivere delle routine grafiche
a basso livello, e vorrei avvantaggiarmi del C++ (č molto piů bello crearsi
delle classi tipo CBitmap, CSprite, ecc). Ho perň paura che questo
appesantisca il codice (sto parlando anche di cicli di clock!!).
Cosa ne pensate voi a proposito?
Grazie per l'attenzione

Cosa ne pensate voi a proposito?
Il C++ dispone di molti strumenti per ottimizzare il costo e sfruttandoli opportunamente
potresti ottenere degli ottimi risultati, nei casi disperati puoi comunque sempre
scegliere di ricorrere all'assembler o semplicemente scrivere codice meno elegante.
Tempo fa per un esame realizzai in C++ un algoritmo raster per calcolare i pixel
di una circonferenza (quello del punto medio, ma senza alcuna particolare ottimizzazione),
le prestazioni erano buone, ma il tracciamento effettivo avveniva con chiamate a
api windows e chiaramente cio` impattava sulle prestazioni (che comunque per il
tipo di applicazione erano piu` che accettabili).
Paolo
-----------------------------------------------------------------
  Paolo Marotta
  Computer Science, University of Pisa
  home:   
http://www.cli.di.unipi.it/~marotta
  Rigorosamente non certificato M$... Una garanzia di qualita`!
-----------------------------------------------------------------

 applicazioni?
Io credo, supportato da ciò che ho letto, che il C++, se utilizzato solo
come C migliore, non introduca alcun overhead aggiuntivo rispetto al C.
Quindi basta non utilizzare le caratteristiche speciali del C++ (più che
altro funzioni virtuali e alcune parti della libreria standard) nelle
routine critiche dal punto di vista della velocità.
EMG


ICQ #34602650

applicazioni?
Nell' ordine vai qui :
http://x15.dejanews.com/[ST_rn=ps]/getdoc.xp?AN=425847828&
CONTEXT=925737766.902430733&hitnum=4
e poi qui :
http://x17.dejanews.com/[ST_rn=ps]/getdoc.xp?AN=425956938&
CONTEXT=925737024.1273167889&hitnum=0
(i links stanno su una sola riga, qui` li ho spezzati in due)
per verificare quanto il C "pesa" di piu` del C++.
Sara` il caso che metta il post di Alex Martelli nelle FAQ.
Ciao
-- 
Roberto Gerola
Email: 
robert...@penguinpowered.com
WWW: 
http://www.penguinpowered.com/~The_Cpp_Compass

Premettendo che ho letto le vostre risposte, vorrei fare una precisazione
generale:
io non parlavo di C++ "spinto" (funzioni virtuali, ecc) ma delle
caratteristiche del C++ base. Se per esempio mi definisco una funzione
membro X::putpixel(int x, int y) scritta tutta in assembler

membro X::putpixel(int x, int y) scritta tutta in assembler
Sostanzialmente l'overhead sarebbe nel famoso parametro nascosto che
chiaramente ruba cicli di clock, ma una valutazione precisa sarebbe molto
difficile. Si tratta comunque del classico prezzo da pagare per avere certi benefici
e secondo me il gioco vale la candela.


parametri come "this", ecc....
Riflettendo meglio sono giunto alla conclusione che quanto ti ho scritto
prima sul this non era tanto vero:
Il fatto che esso rubi cicli di clock sarebbe tutto
da vedere: riportando il codice in un'ottica procedurale il this corrisponde
ai dati che la funzione deve elaborare.
Insomma in un linguaggio ad oggetti scriveresti obj.metodo() in uno
procedurale invece metodo(&obj), il famoso parametro nascosto comunque
non sparirebbe perche` e` una info necessaria alla funzione.
La famosa critica al this quindi non e` che si regga tanto in piedi, l'obiezione
potrebbe essere che ti costringe ad accedere ai dati tramite dereferenzazione
ma in un linguaggio procedurale l'unico modo di evitare cio` sarebbe ricorrere
al passaggio dei parametri per valore che in generale e` assai piu` costoso.
Quindi in soldoni, non preoccuparti del this e del suo presunto overhead...
L'overhead lo troveresti realmente nelle funzioni virtual, ma quello e` il costo
del polimorfismo per inclusione.


e secondo me il gioco vale la candela.
Non so come hai fatto ad azzeccare pienamente il nocciolo della questione:
il msg ha cui hai risposto è una bozza che l'Outlook, nella sua infinita
bontà (o nella mia incompetenza), mi ha spedito mentre stavo scrivendo.
Comunque il problema è proprio quello: mi scervello per ottimizzare con
l'assembler e poi il C++ mi mangia cicli di clock con "pop" "push" per
parametri come "this", ecc....
Ciao e grazie, Giuseppe

 caratteristiche del C++ base.
Le funzioni virtuali sono una caratteristica base del C++.
EMG

 parametri come "this", ecc....
Basta scrivere le funzioni critiche come normali funzioni e non come
metodi e vedrai che il povero C++ non ti mangia niente.
EMG

linguaggio adatto per ottenere il massimo delle performance. 
Per la mia esperienza, il C++ nei videogiochi si usa oggi, eccome. Le
prestazioni servono anche qui solo in (relativamente) piccole porzioni di
codice...e poi il C++ non e' piu' lento del C a parita' di features.
Davide Marcato.
----------------------------------------------------
| -- Freelance International Consultant
| -- Win32/MFC/COM Development & Training
| -- Technical Writer & Speaker
----------------------------------------------------
| -- Email: 
mar...@programmers.net
| -- Web: 
http://www.DavideMarcato.com
----------------------------------------------------

e secondo me il gioco vale la candela.
Il parametro *this in un modo o nell'altro lo pagheresti comunque...
...a parte il fatto che una ipotetic putpixel() sarebbe un delitto non
dichiararla inline o come macro, e quindi il senso del discorso salta. :)



La critica di solito viene fatta da programmatori COBOL-oriented che non
scriverebbero mai metodo(&obj), ma piazzerebbero una bella variabile globale
riempita con il valore opportuno dal codice chiamante, ed usata dal codice
chiamato, invocando metodo() e saltando a pie' pari l'indirezione. :^)
E poi c'e' chi dice bei tempi andati...
(ridendo)
 Cris
--
God is Real, unless declared Integer
-----------== Posted via Deja News, The Discussion Network ==----------
http://www.dejanews.com/
       Search, Read, Discuss, or Start Your Own    

Il parametro *this in un modo o nell'altro lo pagheresti comunque...
Hai ragione... nella fretta ho fatto un po' di confuzione... 
sara` che sto terminando i neuroni!!!!!!
Paolo
-----------------------------------------------------------------
  Paolo Marotta
  Computer Science, University of Pisa
  home:   
http://www.cli.di.unipi.it/~marotta
-----------------------------------------------------------------

Sapete che mi avete convinto pienamente? Oltre a una maggiore leggibilità
del codice, ho capito che (proprio per le sue caratteristiche) il C++
ottimizza alcune parti del codice. Corro (si fa per dire, devo studiare....)
a scrivere la mia libreria grafica!
Grazie a tutti coloro che si sono interessati, Giuseppe









chiamato, invocando metodo() e saltando a pie' pari l'indirezione. :^)
Questa non la sapevo... proprio una bella furbata!!!!!!
(sempre ridendo...)





Bjarne Stroustrup ha scritto un articolo in proposito sul C/C++ User journal
di Maggio 99 dimostrando l'efficienza del C++ rispetto al C.
Stan Lippman ho tenuto una lezione alla sessione Tutorial della conferenze
Usenix (il giorno 3 maggio a San Diego) sulle tecnologie ad oggetti
intitolata "Writing efficient C++ program".
Che questi nomi ti bastino.


a scrivere la mia libreria grafica!
Al contrario del c++, il tuo autluk non ottimizza la banda, hai
postato in due thread diversi lo stesso messaggio per 8 e 5 volte,
dovresti controllare le impostazioni.
Ciao
Bonf
---------------------------------------------------------------------------------
-  Bonf : Per scrivermi bonf at penguinpowered com                              - 
---------------------------------------------------------------------------------
-  Hint : Buttate  KDE nel cesso e installate Gnome 1.0                         - 
---------------------------------------------------------------------------------

Bonf
Chiedo scusa a te e a tutto il NG, ma l'outlook non perdona....

Chiedo scusa a te e a tutto il NG, ma l'outlook non perdona....
E tu non perdonare outlook!  ;-)
Ci sono tante alternative, una e` free agent (gratis, snello e funzionante).


 Chiedo scusa a te e a tutto il NG, ma l'outlook non perdona....
Vedo questo difetto dell'Outlook spessissimo sia qui che in altri ng
italiani ed internazionali. Non capisco perché la gente si ostini ad
utilizzarlo...???
EMG