[Tech] compilatore gcc

Marco Ermini markoer@markoer.org
Gio 14 Set 2006 20:23:57 CEST


On 9/13/06, Claudio Kutufà <claudiok@nexusfi.it> wrote:
> ciao a tutti
> c'è qualcuno che conosce bene il compilatore gcc? Avrei bisogno di
> configurarlo abbastanza a basso livello ma non so bene dove andare a
> beccare una serie di cose.
> Devo fare chiamate a librerie C da un programma Gnu Pascal e mi sembra che
> il compilatore quando chiama le librerie C (che dovrebbero essere ben più
> veloci delle analoghe pascal) faccia una serie di controlli e check per cui
> tali chiamati diventano lentissime. Forse è una nostra idea... qualcuno di
> voi a dimestichezza con configurazioni a baso livello del gcc ?
> ciao
> Cla

E' un po' difficile aiutarti, bisognerebbe avere il tempo e conoscere
i dettagli - anche se sembra interessante :-)

Un consiglio te lo dò "gratis" e d'entreé... NON assumere che un
compilato Pascal sia più lento di uno C. *Anzi*, spesso ho verificato
l'esatto contrario.

Non ho esperienza di GNU Pascal, ma ho usato molto, a suo tempo, il
Pascal di Borland - dalle vecchie versioni Turbo su MSDOS al
compilatore "ad oggetti" di Delphi... e ti assicuro che in Pascal è
facilissimo fare inline assembly - molto più che in C - e spesso ero
sorpreso da quanto poteva essere più performante un programma scritto
in Pascal.

Detto questo, ovviamente le calling convention C e Pascal sono
completamente differenti - a titolo di esempio, pensa soltanto che
come assunto del linguaggio (ovviamente non conosco lo specifico
compilatore, come ho detto) il Pascal non supporta un numero
indefinito di parametri come avviene in C... -, e quindi magari (vado
ad intuito essendo ignorante) i creatori di GNU Pascal hanno aggiunto
qualche controllo per far funzionare "automaticamente" le chiamate di
funzione.

La calling convention di tipo "C" (__cdecl) è molto più dispendiosa di
quella "Pascal" (__pascal) in quanto, essendo il numero di parametri
variabile, deve essere il chiamante a liberare lo stack.

Altra cosa: il Pascal è un linguaggio case-insensitive...

Insomma, pur non conoscendo nulla del tuo problema, posso immaginarmi
diversi motivi per cui una chiamata di funzione da Pascal a C possa
subire un grosso overhead... se il compilatore prova a gestire queste
cose automaticamente...

Hai la possibilità di mettere mano alle funzioni C e ricompilarle
dichiarandole __pascal?


Cordiali saluti
-- 
Marco Ermini
Dubium sapientiae initium. (Descartes)
root@human # mount -t life -o ro /dev/dna /genetic/research
http://www.markoer.org/ - https://www.linkedin.com/in/marcoermini



Maggiori informazioni sulla lista flug-tech