2012-12-10 14 views
8

Próbowałem skompilować do Assembler mój kod źródłowy z najbliższych flagi:
1. -flto
2. -flto -ffat-lto-objects
3. -flto -fno-fat-lto-objectsJaka jest różnica między gcc i tłuszczu LTO-LTO-objects

Trzeci zapewnia zoptymalizowany kod LTO slim, jak napisano w dokumentacji, ale nie widzę żadnej różnicy w pliku zespołu wyjściowego między pierwszym a drugim, dlaczego?

OS: Linux
Kompilator: GCC 4.7

+0

Nie ma sensu pytać o wyniki asemblera i -fno-fat-lto-obiekty w tym samym czasie. –

Odpowiedz

9

Różnica między grubymi i beztłuszczowymi plikami obiektowymi polega na tym, że pliki obiektów grubych zawierają zarówno język pośredni, jak i normalnie skompilowany kod. W Linktime, jeśli wywołasz kompilator bez opcji -flto, grube obiekty będą traktowane jak normalne pliki obiektów (i informacje LTO odrzucone), natomiast cienkie obiekty będą inovke optymizatory LTO, ponieważ nie ma sposobu, aby obsłużyć je bez niego.

Jeśli zarówno kompilujesz, jak i łączysz z -flto, zarówno gruby, jak i cienki obiekt powinien dać ci ten sam plik binarny, tylko cienkie obiekty będą mniejsze i szybsze do kompilacji, ponieważ unikniesz generowania nadmiarowego kodu.

+0

A teraz - w przeciwieństwie do poprzedniego pytania, domyślnie wybrano tryb cienki, prawda? (Przy okazji czytałem o LTO i widziałem twoje imię :-) –

2

Prawdopodobnie będzie to pomocne dla kogoś:
Here pisał dalej:
The current implementation only produces “fat” objects, effectively doubling compilation time and increasing file sizes up to 5x the original size

Więc jak myślę, że to główny powód .

Powiązane problemy