2012-07-09 15 views
6

Zauważyłem, że moja aplikacja nds działa trochę szybciej, gdy zastępuję wszystkie wystąpienia bajtów liczbami całkowitymi. wszystkie przykłady online umieszczają przypadki u8/u16, gdy tylko jest to możliwe. Czy istnieje konkretny powód, dlaczego tak się dzieje?Dlaczego liczby całkowite są przetwarzane szybciej niż bajty w NDS?

+0

Czy możesz podać przykładowy kod? Podejrzewam, że widzisz przykłady deklarujące zmienne 8/16 bitowe w strukturach, a zamiast tego używasz ich jako locals. –

Odpowiedz

16

Głównym procesorem używanym przez Nintendo DS jest 32-bitowy procesor ARM9.

odniesienia: http://en.wikipedia.org/wiki/ARM9

                                       

Zwykle procesor będzie przeprowadzał operacje w trybie word sizes, w tym przypadku 32-bitowym. W zależności od operacji konwersja bajtów do liczb całkowitych lub odwrotnie może powodować dodatkowe obciążenie procesora. Ta konwersja i potencjalny brak instrukcji dla wartości innych niż 32-bitowe liczby całkowite mogą powodować brak prędkości.

7

W uzupełnieniu do tego, co powiedział Daniel Li, dostęp do pamięci na platformach ARM musi być dopasowany do słów, tzn. Pobrane w pamięci muszą być wielokrotnością 32 bitów. Pobieranie zmiennej bajtowej z pamięci pociąga za sobą pobranie całego słowa zawierającego odpowiedni bajt i wykonanie wymaganych operacji bitowych w celu dopasowania go do najmniej znaczących bitów rejestru procesora.

Te dodatkowe instrukcje są automatycznie wysyłane przez kompilator, ponieważ zna on faktyczne wyrównanie zmiennych.

Powiązane problemy