[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