Będę tu przeciwnikiem i powiem, że nigdy nie jest za wcześnie, aby uczyć się o optymalizacjach, szczególnie o optymalizacji złożenia i, co ważniejsze, debugowaniu w asemblerze. Wierzę, że uzyskasz maksymalne korzyści z tego, jeśli jesteś studentem (ponieważ wtedy masz bardzo mało do stracenia [tj. Pod względem czasu / pieniędzy]) i wszystkiego, co możesz zyskać.
Jeśli pracujesz w branży i nie musisz majstrować przy montażu, to nie rób tego. W przeciwnym razie, jeśli jesteś studentem lub ogólnie masz czas, znajdę czas na naukę deasemblacji programów i zobaczę, czy mogę wymyślić lepsze rozwiązanie niż kompilator. Jeśli nie mogę, kogo to obchodzi! Właśnie nauczyłem się pisać, a także kompilator i jest to OGROMNY plus, gdy masz do czynienia z błędem w kodzie wydania (bez symboli debugowania) i wpatrujesz się w dezasemblację, ponieważ to jedyna rzecz, na którą możesz patrzeć.
Odpowiedź
Jest to jeden z najlepszych zasobów, jaki znalazłem, aby dowiedzieć się o optymalizacji.
http://www.agner.org/optimize/
Rant
Jeśli czytasz niektóre artykuły głównych programistów (na przykład, rozumowanie stojące za tworzeniem EASTL i dokładniejsza kontrola kodu doprowadzi cię do takich komentarzy, jak to zrobiono, ponieważ GCC jest okropny w wstawianiu tej instrukcji if, która powie ci, co większość ludzie mówią, że ufasz, że kompilator nie zawsze ma rację, W SZCZEGÓLNOŚCI w tworzeniu gier), a następnie postawiłeś stopę w branży, przekonasz się, że optymalizacje są codziennością, a wiedza o tym, co oznacza wynik montażu, jest dużym plusem. Ponadto ludzie nie zdają sobie sprawy (szczególnie przy przepływie stosów), że profilowanie gier jest bardzo trudne i nie zawsze dokładne.
Jest jednak zastrzeżenie. Możesz poświęcić czas na optymalizację czegoś, a później uświadomić sobie, że to był czas stracony. Ale czego się nauczyłeś? Nauczyłeś się nie powtarzać tego samego błędu w podobnych okolicznościach.
To, co teraz przyjmuje SO, to moim zdaniem postawa religijna w stosunku do oświadczenia, które nie jest optymalizowane, dopóki nie profilujesz i nie martw się, kompilator wie lepiej niż ty . Utrudnia naukę. Znam ekspertów w branży, którym wypłacane są bardzo dobre pieniądze (i mam na myśli BARDZO dobre pieniądze), aby bawić się w asemblerze, aby zoptymalizować grę i debugować ją, ponieważ kompilator jest zły lub po prostu nie może ci pomóc, ponieważ, no cóż, to nie może (awarie związane z GPU, awarie, w których danych nie można odczytać w debuggerze itp.)!
Co jeśli ktoś, kto uwielbia to robić, nie zdaje sobie jeszcze z tego sprawy, zadaje pytanie tutaj i jest wyłączony / wyłączony przez kompilator wielu odpowiedzi, który zna lepiej niż ty! i nigdy nie staje się jednym z tych wysoko opłacanych programistów?
Ostatnia myśl. Jeśli zaczniesz robić to wcześnie, przekonasz się, że wkrótce zaczniesz pisać kod, który jest najgorszy, nie ma żadnej poprawy wydajności, ponieważ kompilator zoptymalizował go w ten sam sposób lub w najlepszym razie, ma pewne ulepszenia wydajności, ponieważ teraz kompilator może go zoptymalizować . W obu przypadkach stało się to nawykiem, a pisanie kodu w ten sposób jest wolniejsze niż wcześniej. Oto kilka przykładów (jest ich o wiele więcej):
- Wstępna inkrementacja, chyba że naprawdę chcesz dodatkowej inkrementacji
- Zapisywanie pętli dla kontenerów przy użyciu stałej zmiennej lokalnego rozmiaru zamiast wywoływania size () na kontenerze w pętli.
EDYCJA: Aktualizacja po 8 latach w branży. Naucz się montażu. Dowiedz się, jak działają optymalizatory i generowany przez nie zespół (CompilerExplorer jest do tego doskonałym narzędziem). Natknąłem się na niezliczone awarie w kompilacjach testowych (kompilacje zoptymalizowane do testowania wewnętrznego), w których nie można polegać na debuggerze nawet przy symbolach debugowania. Kompilator zoptymalizował zbyt wiele rzeczy, a zespół jest twoim jedynym źródłem cennych informacji, aby znaleźć błąd z zrzutu awaryjnego. Każda kompilacja zajmuje 30-40 minut, jeśli masz szczęście i najpierw w kolejce kompilacji - więc nie możesz polegać na tradycyjnych technikach izolowania błędu. Tryb wieloosobowy pogarsza sytuację. Znajomość montażu i sposób czytania zoptymalizowanego zestawu sprawi, że będziesz lepszy i ostatecznie bardziej wartościowy dla zespołu.