Tento clanok je ako pohladenie po dusi v porovnani s tym nedavnym clankom o Amige pri ktorom som skoro dostal srdcovy zachvat. Keby boli vsetky clanky na Root-e taketo kvalitne... Zostava iba dufat, ze sa najde viac skutocnych znalcov ochotnych napisat poriadne clanky.
O primo techto testech nevim, ale jinak je samozrejme nekolik testu
co se zhorsilo. Vetsinou s trochou trpelivosti to jde odstranit pouzitim napriklad -mpreferred-stack-boundary=2 ci -maccumulate-outgoing-args a podobnymi triky.
Problem v kernelu bude zejmena prerovnavani bloku, takze asi -mno-reorder-blocks.
Jak jsem v clanku psal, kvalita kodu je problematicka, snad priste :)
Pouzivam verzi 2.95 (KDevelop 1.4) a vadi mi ze GCC defaultne u funkci typu:
void a(int b)
{
}
hlasi warning ze parametr b nebyl vyuzit. U promennych je to v poradku ale u parametru by se warning podle me mel objevit az na pozadani. Borland a VC toto defaultne nehlasi. Take mi vadi ze nejsou urovne warningu a musim trapne zkoumat kazdy jednotlivy warning zda ho mam zapnout nebo vypnout.
No jo, ale kdyz do zdrojaku budu psat takove nesmyslne pragmy uz to nebude prenositelny :-(. A kdyz uz jsem tady mam jeste par pripominek:
1. Srovnavani unsigned a signed promennych by nemelo defaultne davat warning, to souvisi s prvnim prispevkem ktery jsem napsal.
2. Hlaska pri chybe je vetsinou mirne matouci a troufnu si tvrdit ze jine prekladace lepe vysvetli uzivateli co udelal blbe.
Jinak jako byvaly uzivatel VC a BC musim rict ze i pres pocatecni neduveru GCC se mi libi. Jeste to trochu "zuserfriendlit" a nebude to mit chybu. Pro me osobne je komfort prace s prekladacem (hlasky, warningy, moznosti nastaveni) dulezitejsi nez par procent vykonu.
Jeste upresnim. Co se tyce benchmarku, zalezi na programu. U specint2000 na Athlonu gcc trhne Intel C i Visual C v mnoha testech,
v jinych ale zase ne.
Celkove je Intel C 8% lepsi, visual C 10% horsi, borland C jsem netestoval.
Tohle je ale hodne vagni a neoficialni porovnani :)
U specFP je Intel C asi 20% lepsi, Visual C asi 3% lepsi.
Rozhodl jsem se zkusit gcc 3.0.0 v distribuci kterou sam stavim pro sve vlastni potreby, a dopadlo to zalostne. Zkompiloval jsem staticky linkovanym gcc (linkovane s glibc 2.2.2 z RH 7.1) knihovny glibc 2.2.3, pote jsem zkompiloval gcc 3.0.0 na novych knihovnach. Vse fungovalo do doby, nez jsem zkompiloval dynamicky fileutils-4.1 - segmentation fault u ls kdesi hluboko v threadove knihovne, naprosto stejny segmentation fault v nove zkompilenem make. Vratil jsem se ke staticke fazi a pouzil gcc 2.95.3 a k zadnemu SIGSEGV nedochazi.