OT bitove polia a efektivita; Was: pointery C

Milan B. milan na bastl.sk
Čtvrtek Květen 23 11:35:55 CEST 2013


On 5/23/2013 9:18 AM, Jan Waclawek wrote:
>
> Kedze norma - ako uz bolo v predchadzajucej diskusii uvedene - sa pomerne
> striktne vyvarovala predpisovaniu formy pointrov, nie je ziadna zasadna
> prekazka implementovat bitove pointre uplne akokolvek, aj naozaj ako
> bitova adresa. V skutocnosti je ta prekazka ciste administrativna a
> spociva v C99 6.2.6.1#2:
> Except for bit-fields, objects are composed of contiguous sequences of one
> or more bytes,[...]
> Z toho vyplyva druha, v podstate od tejto odvodena a tiez len
> administrativna prekazka vo forme poziadavky, ze pri konverzii akehokolvek
> pointra-na-objekt na pointer-na-char tento musi ukazovat na prvy byte
> objektu.

Mate pravdu, v  casoch  far/small/huge/tiny memory modelov na x86 naozaj 
smernik nemusel znamenat priamo linearnu adresu v pamati a vedeli sme s 
tym zit. Ako lahko sa da na zle zabudnut :)

Z tohoto pohladu by technicky naozaj bolo mozne definovat a 
implementovat smernik tak, aby obsahoval aj poziciu bitu.

  Ale to druhe obmedzenie je problem.

> No a chce to este nejakeho odvazlivca, ktory to do nejakeho vplyvneho
> kompilatora (najlepsie gcc) naimplementuje a (co je paradoxne mozno este
> tazsie) si si tu implementaciu presadi proti GNU klike.

Ten napad s bit-bandingom ani velmi nepotrebuje zmeny v kompilatore.

Staci si zadefinovat 32 bitovu premennu a umiestnit ju  do regionu bb 
aliasov (vhodne upraveny linker sktript to zabezpeci, vratane vyhodenia 
prislusnych par byte  bb regionu z RAM).

typedef uint32_t  bit;

bit b1  __attribute__((section ("bbalias")));

Keby v gcc fungovalo nieco taketo:

typedef uint32_t  bit __attribute__((section ("bbalias")));

bolo by to uplne dokonale.

Az na ten detail, ze vzdialenost dvoch susednych bitov je 4 to nema chybu :)

-m-

> wek
>
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list



Další informace o konferenci Hw-list