[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