Jo Digital....
Je mne smutno, kdyz si uvedomim, jak to skoncilo...To byly casy s Digital Unixem 3.2C a 3.2G... :-(
V Praze na Pankraci meli pobocku, pomerne casto jsem tam jezdival. Pekne se to na ni vyjimalo, to co ma kamarad nad posteli....Ale to uz je vic nez 10 let :(
v minulem zamestani byla masinka alpha station 500 s digital unixem, kdyz ji uz prestali kolegove pouzivat a lezela tam chudinka, tak jsem na ni picnul linux a bylo. ach, romanticke mladi.
Pročítal jsem si opět svůj oblíbený seriál a tak mě tak napadlo, že by neuškodilo udělat později jakýsi souhrn s radami, jak zacházet s trpaslíky pro zvýšení jejich efektivity. Tzn pokud někdo programuje ve vyšším programovacím jazyce, který nutně musí používat stejné instrukce procesoru, tak z čeho by měl při programování vycházet a co by měl používat, či čeho by se měl vyvarovat ve svém programu. (třeba něco jako, že pro jednoduché podmínky se má použít boolean a ne nějaký string nebo reálné číslo kde se budou využívat jen 2 čísla)
jinak na to omezení relativních adres si pamatuji ze střední... jsme tam dostali nějaké instrukce, nějaké letmé vysvětlení a starejte se... Pak se nám stávalo, že jsme používali nevhodně relativní skoky, které někam nemohli doskočit a museli jsme je dalším skokem nastavovat. :-)
Proc ne, klidne neco podobneho pripravim. U jsem taky videl par zdrojaku, kde se (i v typovanem jazyce) vesele vsude pouzivaly pouze retezce a semtam se to prevedlo na cisla ci booleany :-)
Ano, uz sem taky videl program v nasledujicm stylu (ted uz nevim, ale asi v C++) s promennou typu string:
while (string.length()<320) string+=' '
out << string;
a uz ten clovek nevidi za kazdym +=' ' ten realloc() coz je zase potencialne malloc() + memcpy() + free() :-(
A dalsi oblibena na stejne tema je
strcpy(a,b);
strcat(a,c);
strcat(a,d);
A zase uz ten programator nevidi/nechce videt, ze strcat() uz je cyklus ve stylu:
while (*a) a++;
while (*(a++)=*(b++)); // :-)
tj. vzdy projdu znovu cele pole od zacatku ......
A pak se clovek divi, ze i kdyz jsou pocitace cim dal rychlejsi, tak programy jsou cim dal pomalejsi :-( Jo holt, za pokrok se plati :-)
>while (string.length()<320) string+=' '
>out << string;
>
>a uz ten clovek nevidi za kazdym +=' ' ten realloc() coz je zase potencialne malloc() + memcpy() + free() :-(
Jaky? Kazda normalni STL knihovna nealokuje pri kazdem pozadavku na pamet o 1b vetsi pole, ale voli vetsi velikost (a navic sve alokace vetsinou resi pres memory pool).
Schvalne jsem si tenhle tvuj program zkusil s prazdnym stringem na Linuxu (amd64 arch), cely program za svuj beh udelal 10 volani malloc(). Zpozdeni je samozrejme nemeritelne (v obou pripadech time nahlasil user 0m0.000s)...
>strcpy(a,b);
>strcat(a,c);
>strcat(a,d);
A kolik tim promrhas strojoveho casu? Pokud tedy nemas nekolik MB dlouhe stringy ci nespoustis tuhle rutinu milonkrat za vterinu :-)
Tohle jsou takove priklady trochu mimo realitu. Realita je takova, ze programatorska prace je draha a HW je levny. Diky cemuz tu mame jazyky jako C#, Java a podobne, protoze u vetsiny neni zdaleka tak dulezita co nejvyssi rychlost (pokud se bavime rekneme o desitkach procent vykonu), ale spolehlivost a naklady na vyvoj.
A ty priklady, co jsi zde uvedl, jsou zrovna z takove skatulky tech, kterych se znacna cast programatoru naprosto uvedomele dopousti s tim, ze to na vysledny vykon aplikace nema prakticky zadny dopad.
Hezký souhrn pracovních postupů (byť na trochu jiné úrovni) jak zacházet s trpaslíky je v draftu Knuthova TAOCP vol. 7 - Bitwise Tricks and Techniques. Úžasné, co se dá všechno s těmito jednoduchými trpaslíky dělat, zvláště když se kombinují logické a aritmetické operace.
Šel, stejně tak i pomocí AND A,A nebo dvojité negace. Je to jenom příklad na vysvětlení instrukce CMP, určitě ne ukázka dobrého stylu programování v ASM.