2009-11-22 25 views

Odpowiedz

11

Robi to, co mówi: generuje kod maszyny . Wiele kompilatorów przekształca źródła C/C++ w wewnętrzną reprezentację pośrednią, która jest później używana jako źródło do generowania rzeczywistego kodu maszynowego. Kompilator Visual C++ (jak wiele innych kompilatorów) robi to w partiach: pierwszy to przekłada się kilka plików źródłowych do tego półproduktu reprezentacji, a następnie konwertuje je wszystkie do kodu maszynowego (a następnie rozpoczyna pracę na następnej partii). Tak dzieje się, gdy zobaczysz komunikat "Generowanie kodu".

Nie wiem dokładnie, co to jest logika za pomocą podzielić pliki źródłowe do partii. Może to działa po prostu przez rozmiar: gdy całkowity rozmiar wszystkich reprezentacji pośrednich wygenerowanych do tej pory osiąga pewien limit, przechodzi do trybu "generowania kodu". Może tam też jest jakaś inna logika.

W każdym przypadku należy pamiętać, że niewykwalifikowany termin "kod" w tym przypadku nie odnosi się do kodu źródłowego, co oznacza, że ​​nie ma nic wspólnego z szablonami i/lub preprocesorem lub czymkolwiek podobnym. Co więcej, odwoływanie się do źródła C z niekwalifikowanym "kodem" (w przeciwieństwie do kwalifikowanego kodu "źródło") jest rzeczą bardzo niszową, bardziej w domu z działem marketingu niż z rzeczywistymi programistami. Na poziom nikt programistów odnosi się do źródeł C, jak tylko «kodu» :)

+0

dobre rozróżnienie, zacząłem się zastanawiać nad tym nowym rozwiązaniem, nad którym pracowałem, dlaczego powstaje tak wiele generowania kodu, że generowanie kodu źródłowego błędnie założyłem. – jxramos

-2

Visual Studio jest wywoływanie łącznik LINK.exe działa głównie z plikami obiekt jako dane wejściowe, aby produkować wykonywalny jako wyjście, ale również jest w stanie wiele innych prac dotyczących tych i powiązanych plików. Linker Command-Line Syntax @ MSDN

+1

Nie sądzę więc w tym przypadku leki odnosi się do zestawiania źródła, nie odwołuje się czas. Chociaż masz rację, linker może również wygenerować kod do tworzenia szablonów. –

3

Kompilator otrzymuje wiele plików wejściowych jednocześnie i odczytuje (przetwarza) kilka z nich za jednym razem, a dopiero potem tworzy dla nich wyjściowe (pliki obiektów), zanim odczyta więcej plików wejściowych. Przypuszczam, że jest to optymalizacja, prawdopodobnie dlatego, że mieszany dostęp do odczytu/zapisu na dysku jest wolniejszy niż wtedy, gdy jest posortowany w (pierwszy) dostęp do odczytu i (następnie) dostęp do zapisu. przykłady

+0

Przypuszczam, że ktokolwiek, kto na to zagłosuje, wie lepiej. Chcesz mnie oświecić? – sbi

-2

matrycy (oraz inny rodzaj kodu) może wygenerować kod (lub nie jest w niektórych warunkach).

+1

Tak, ale VC nie poświęca czasu na tę fazę, nawet jeśli w kodzie nie ma szablonów. – sbi