[#12]
Re: [C] Kolejność bitów na różnych platformach, zapis/odczyt pliku binarnego.
@michal_zukowski,
post #2
Należy jednak pamiętać że oznaczenie struktury w taki sposób powoduje, że dane będą trzymane w niej w konkretnym endianie. To oznacza, że o ile fread/fwrite/memcpy po całej strukturze staje się przenośne*, to jeśli wymusiłeś tam little-endian na big-endianowym komputerze, to z każdym dostępem do pól struktury program będzie musiał sobie przeliczyć wartości na natywny endian zanim cokolwiek z nimi dalej zrobi.
Według mnie, lepiej się wysilić trochę i tego jednego fread() zastąpić czytaniem pole po polu + jednorazowe odwracanie endianów w większych polach, żeby potem nie musieć odwracać w głównej pętli gry. A co do gwiazdki - prędzej czy później takie podejście fread/fwrite Ci się i tak wysypie, jak trafisz na to że jedna platforma ma inny
alignment niż druga. Tutaj można się posiłkować atrybutem packed, ale to przynosi kolejne klasy problemów, w tym konieczność wyłuskiwania danych wolniej niż zwykły, wyrównany dostęp dostępny dla procesora. A najlepiej, z racji tego że na pececie masz aż nadto mocy obliczeniowej, generować pliki już w big endianie, i wtedy na Amidze nie musisz robić swapa bajtów przy ładowaniu pól.
Ostatnia aktualizacja: 08.03.2021 16:12:00 przez teh_KaiN