2009-03-24 21 views
5

Zawsze wierzyłem, że wersje debugowania są wolniejsze niż kompilacje wydania, ponieważ kompilator musi dodatkowo generować informacje o debuggerze. Ostatnio byłem zaskoczony, gdy usłyszałem od jednego z moich kolegów, że budowanie wersji zwykle zajmuje więcej czasu. (Uważam, że dzieje się tak tylko z powodu przyrostowego łączenia/kompilowania).Release vs Debug Build Times

Ogólnie, który z nich jest szybszy?

Odpowiedz

13

Cóż, istnieje wiele zmiennych, które mogą mieć wpływ na rzeczy. Oto kilka powodów: Debugowanie może być szybsze:

  • Zwykle tryb debugowania ma o wiele mniejsze optymalizacje, ponieważ mogą one zepsuć mapowanie instrukcji i linii kodu. Tak więc kompilator wykonuje tam mniej pracy.
  • Nawet jeśli pełna kompilacja debugowania jest wolniejsza, kompilacje debugowania zdarzają się znacznie częściej i zazwyczaj mogą korzystać z przyrostowych wersji o wiele bardziej niż kompilacja wydania. Dość często kompilacja debugowania nie musi wykonywać prawie tak dużo pracy, jak w przypadku wydania.
0

Tylko zgaduję, ale zakładam, że w większości przypadków budowa wersji zajmie więcej czasu z powodu optymalizacji.

0

Wersje debugowania są zwykle szybsze, ponieważ nie ma potrzeby przeprowadzania optymalizacji (co jest bardzo powszechne w kompilacjach wersji).

Można zrezygnować z generowania symboli debugowania za pomocą pliku wykonywalnego i bez optymalizacji, ale byłoby to dziwne w przypadku kompilacji wydania. Chociaż myślę, że będzie szybciej budować.

Główną różnicą między debugowania i uwalniania jest, że Debug jest przeznaczona do debugowania (tak zawiera symbole debugowania) i Release ma działać szybciej, więc użyć silnej optymalizacji

1

W sumie, to bym się spodziewać, że kompilacja debugowania będzie szybsza w budowie, ale wolniejsza w uruchamianiu, a kompilacja wydania będzie trwała dłużej, ale efekt końcowy będzie działał szybciej.

To zależy od tego, czy buid wydania ma prawdopodobnie bardziej agresywną optymalizację, a te mogą zakłócać debugowanie. Również niektóre optymalizacje na większą skalę zajmują dużo czasu. Czas wstawiania informacji do debugowania w plikach obiektowych jest na tyle mały, że można go zignorować, prawdopodobnie zajmuje to mniej czasu niż czytanie kodu źródłowego z dysku.

0

Głównym powodem, dla którego kompilacje wydania będą szybsze, jest to, że kompilator wykonuje na nich wiele optymalizacji. Na przykład może rozwinąć pętle, usunąć niepotrzebne zmienne i funkcje wbudowane. Optymalizacja nie jest trywialnym zadaniem i wymaga dużej mocy obliczeniowej, co spowalnia proces kompilacji.

Większość kompilatorów umożliwia wyłączenie optymalizacji kompilacji wersji. Spróbuj tego. Twoje czasy budowy ulegną zmniejszeniu. Możesz także włączyć optymalizację w kompilacjach debugowania i zobaczyć, jak rośnie czas budowania.

Powiązane problemy