[th/gcc4] apps fixing guide #2 - aliasing violations.

Grzegorz Konopko kolodko1 w wp.pl
Czw, 4 Maj 2006, 22:34:32 CEST


Dnia czwartek, 4 maja 2006 20:22, Paweł Sikora napisał:
> [3] OK.
> tutaj nadal jest poprawnie, bo typ znakowy może się nakładać na inne typy.
>
> bool tell_endian()
> {
>         unsigned x = 1;
>         return *(char*)&x;
> }
>
> jednak dobrą praktyką jest unikać rzutowania przez wskaźniki
> i zapisać powyższy przykład z użyciem unii -> [4].

W powyższym chodzi o przejrzystość kodu?

ze 2 tygodnie temu naciąłem sie na podobny własny trick, uzywam takich duzo bo 
czasem trzeba.
Ale nie rozumiem dlaczego właściwie tak to tłumaczą, sprawa opiera sie 
przecież o rozkazy przesłań (różnych), które wymagają wyrównanej granicy 
położenia w pamięci w zależności od rozkazu, co z kolei podyktowane jest 
architekturą.

Tam gdzie:
sizeof(float) ==  sizeof(int) juz powinno być ok (ale nie sprawdzałem na x86).
Ja w każdym razie jeśli mogę to posługuję się #pragma + magia do wyrównywania 
danych w pamieci lub memcpy(), nie wiem jak memcpy() jest implementowane na 
glibc bo akurat do tego nie uzywałem do tego. Niech ktos oświeci w 
implementacji memcpy() na glibc.
 


Więcej informacji o liście dyskusyjnej pld-devel-pl