[OSy] Používání bit fields
Martin Decky
decky at d3s.mff.cuni.cz
Fri Nov 30 12:33:48 CET 2012
Hezky den,
> rád bych se ujistil, zda není problém s používáním céčkovských bit
> fields
U bit fields je potreba uvedomit si alespon tyto tri dulezite aspekty:
a) Skutecny memory layout struktury s bit fields je ovlivnen bit
orderem (ktery typicky koresponduje s byte orderem, ale ne
nezbytne), paddingem a dalsimi vlastnostmi ABI na dane platforme.
Cili bit fields jsou prenositelny konstrukt jazyka C (v tom smyslu,
ze funguji vsude), ale pochopitelne nemohou garantovat binarni
kompatibilitu ulozenych dat z ruznych platforem. To ovsem plati pro
ceckove struktury obecne.
b) Jak uz spravne upozornil pan Herrmann, u explicitnich bitovych
operaci je pri modifikaci bitu na prvni pohled videt semantika
read-modify-write. Zatimco zapis do bit fields muze na prvni pohled
(syntakticky) budit dojem, ze lze skutecne zapisovat atomicky
jednotlive bity, coz muze cloveka vest ke spatnym predpokladum.
S tim souvisi nevhodnost pouziti bit fields pro pristup k pametove
mapovanym registrum hardwaru: Pri pouziti bit fields nema
programator kontrolu nad tim, po jak velkych blocich (slovech,
pulslovech, bytech) bude prelozeny kod pamet cist a zapisovat.
Pricemz hardware se muze chovat vyrazne jinak podle toho, zda se
jeho registry ctou a zapisuji po slovech nebo mensich integerech.
c) Je skutecne pravda, ze nektere prekladace jsou schopny vygenerovat
pri pouziti bit fields velmi zvlastni kod, rozhodne ne optimalni.
Navic, jak uz psal pan Herrmann, pri explicitnich bitovych operacich
muzete zkratka nektere operace uplne vynechat, protoze Vas nemusi
zajimat presna hodnota bitu, ale napriklad jen to, zda je
vymaskovana hodnota nulova nebo ne.
Pokud se ta manipulace s konkretnimi bity bude provadet milionkrat za
sekundu, muze jedna usetrena operace a pristup po celych slovech
pomoci. Pokud se bude manipulace provadet trikrat za celou dobu behu
systemu, muze byt vyhodou elegantnejsi syntaxe bit fields.
Souhrnem lze tedy asi rici, ze pouziti bit fields neni obecne nic
spatneho, ale clovek by se mel vzdy dukladne zamyslet, zda to je v
konkretnim pripade vhodny zpusob.
M.D.
More information about the NSWI004
mailing list