OT bitove polia a efektivita; Was: pointery C

Josef Štengl ok1ced na nagano.cz
Čtvrtek Květen 23 12:07:23 CEST 2013


Dne 23.5.2013 11:35, Milan B. napsal(a):
>
> 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 :)
>
Skutečně? V C vás zajímá, jak to má daná architektura implementováno? Z 
hlediska jazyka se vždy musí jednat o lineární prostor, jinak by nemohla 
fungovat poiterová aritmetika. Jak je to fyzicky, to je už věc 
kompilátoru a architektury.

> Z tohoto pohladu by technicky naozaj bolo mozne definovat a
> implementovat smernik tak, aby obsahoval aj poziciu bitu.
>
Technicky ano, prakticky je to hloupost :-).

> 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.
>
Ale nepřenositelné. Atributy nejsou součástí specifikace jazyka C.
Jako sen dobré, ale prakticky je to hloupost :-)

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

Grr…. No dobrá, však já už se vám do toho nebudu rýpat. Nastejno mícháte 
bitová pole (stuctura v C) s bitovými maskami (bitové operace nad 
proměnnou) a já to beru vážně :-)

ced


Další informace o konferenci Hw-list