Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Vijjje
Jag ville poängtera att utdatan inte måsta vara den samma. Utdatan kan se olika ut. Som standard optimerar inte GCC om jag minns rätt. Men koden kan optimeras, detta ger annan utdata. Det blir inte buggar bara för det. Testa olika optimerings nivåer och jämför kompileringstiden och utdatan. Jag vet inte om gcc-4.0 ger annan utdata än gcc-3.3, men det är möjligt. Det finns flera sätt att åstadkomma samma resultat, vissa är snabbare. Ett exempel: (A NAND B) NAND (A NAND B) = A AND B, samma sak eller hur? Men vilket innebär minst dator kraft?

Utdatan ska alltid vara samma. Den grundläggande optimeringsprincipen är att utdatan inte ska förändras när man optimerar. Och med utdatan menar jag inte minne/tidsåtgången, utan den faktiska koden som genereras.

Vilken kompilator man använder när man kompilerar en kompilator ska ju självklart inte påverka vilken kod som genereras av den kompilatorn man kompilerar.

Är ju logiken i kompilatorn som avgör vilken kod som genereras, denna logik ändras ju inte bara för att man använder en annan kompilator. Eller ska inte göra det iallafall, men om använder odefinerade saker i språket så kan ju resultatet skilja beroende på kompilatorn.

Visa signatur

Intel Core i7-3770K | NVIDIA Geforce GTX 980 | 16 GB DDR3 | DELL P2415Q | DELL U2711 | DELL U2410

Permalänk
Medlem

Jag testa om jag kunde få olika utdata från kompilatorn, testa med ett befintligt program, ett hello world i SDL

victor@MacBooken% g++ main.cpp -o O3.out -O3 -lSDL -lSDLmain -framework cocoa victor@MacBooken% g++ main.cpp -o O2.out -O2 -lSDL -lSDLmain -framework cocoa victor@MacBooken% diff O2.out O3.out Binary files O2.out and O3.out differ

Ja och titta det kunde jag ju.

Kan det vara ett vi menar olika? Menar ni att gcc-4.0 ger samma utdata oavsett vilken kompilator man kompilerar gcc med? I så fall håller jag med. Annars hävdar jag som så att två binärer kan se olika ut om dem är kompilerade med olika kompilatorer.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Vijjje
Jag testa om jag kunde få olika utdata från kompilatorn, testa med ett befintligt program, ett hello world i SDL

victor@MacBooken% g++ main.cpp -o O3.out -O3 -lSDL -lSDLmain -framework cocoa victor@MacBooken% g++ main.cpp -o O2.out -O2 -lSDL -lSDLmain -framework cocoa victor@MacBooken% diff O2.out O3.out Binary files O2.out and O3.out differ

Ja och titta det kunde jag ju.

Kan det vara ett vi menar olika? Menar ni att gcc-4.0 ger samma utdata oavsett vilken kompilator man kompilerar gcc med? I så fall håller jag med. Annars hävdar jag som så att två binärer kan se olika ut om dem är kompilerade med olika kompilatorer.

Självklart så kan den kompilerade filen se annorlunda ut, det vi menade var ju att gcc-4.0 i detta fall alltid kommer att generera samma kod, oavsett vilken kompilator man använde när man kompilerade gcc-4.0.

Visa signatur

Intel Core i7-3770K | NVIDIA Geforce GTX 980 | 16 GB DDR3 | DELL P2415Q | DELL U2711 | DELL U2410

Permalänk
Citat:

Ursprungligen inskrivet av MagnusL
Utdatan ska alltid vara samma. Den grundläggande optimeringsprincipen är att utdatan inte ska förändras när man optimerar. Och med utdatan menar jag inte minne/tidsåtgången, utan den faktiska koden som genereras.

Vilken kompilator man använder när man kompilerar en kompilator ska ju självklart inte påverka vilken kod som genereras av den kompilatorn man kompilerar.

Är ju logiken i kompilatorn som avgör vilken kod som genereras, denna logik ändras ju inte bara för att man använder en annan kompilator. Eller ska inte göra det iallafall, men om använder odefinerade saker i språket så kan ju resultatet skilja beroende på kompilatorn.

Vad menar du med att koden som genereras alltid ska vara den samma? Meningen med optimering är ju att man skall få en annan kod.
*edit* offtast effektivare på något sätt, storlek, resurs eller minne.

Du som är en grymt mycket bättre c++ programmerare än mig, borde ju ha erfarenhet av vad som exempelvis händer om man glömmer att deklarera vissa variabler som flyktig (volatile) vid interrupts och man har en viss nivå optimering påslagen.
Alltså blir inte koden eller ens funktionen den samma vid olika optimeringar.

Däremot har kompilatorutvecklarna försökt göra så att indata=>utdata för vanliga tillämpningar är så lika som möjligt, så att det inte skall påverka resultatet som programmeraren hade tänkt.

Visa signatur

[Core i7-3930K med 32GB ram, 2*256GB SSD] & [Core i7 3770K med 16 GB RAM, 256GB SSD] som tillsammans har ett [HD 5850 1GB] och 3st 24".

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av bud_bundy
..

Se mitt inlägg ovan.

A => B => C

A kompilerar programmet B, som råkar vara en kompilator.
B kompilerar programmet C som är t.ex. ett spel.

Det A gör när den kompilerar B ska ju inte påverka vad B spottar ut. Programmets logik m.m ska ju alltid vara identisk, alltså dem ska bete sig som programmeraren ville när han skrev koden.

Finns ju som sagt undantag som beror på slarvig kod som inte följer standarden, och då kan utdatan bli olika.

Visa signatur

Intel Core i7-3770K | NVIDIA Geforce GTX 980 | 16 GB DDR3 | DELL P2415Q | DELL U2711 | DELL U2410

Permalänk

då man compliar vad man programmerat med Dev-C++ 4. så går det inte att öppnas, och det kommer inte upp nåt då jag skall run'a projectet. koden är rätt har kollat. vad kan vara felet?

Visa signatur

Det är bättre att fråga och verka okunnig, än att förbli det.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av virtual1337
då man compliar vad man programmerat med Dev-C++ 4. så går det inte att öppnas, och det kommer inte upp nåt då jag skall run'a projectet. koden är rätt har kollat. vad kan vara felet?

Dev-C++ är ingen kompilator, antar att du använder MinGW som är standard för Dev-C++ ( när jag använde det i alla fall ). Och testa att lägga till #include <cstdlib> och sedan system("pause"); eller cin.get(); eller något i slutet som håller uppe fönstret.

Permalänk

okej skall försöka

kan du vara vänlig och skriva en "hello world" grejj så jag ser koderna hur du gör för att hålla uppe rutan?

och BTW, finns de nå bättre programm att programera i, skulle va kul att hitta nåt bättre änn DEV-C++

Visa signatur

Det är bättre att fråga och verka okunnig, än att förbli det.

Permalänk
Medlem

Och vad jag menade i mitt ursprungliga inlägg vara att LOGIKEN i programmet inte ska ändras vid optimeringen. Visst set kan den genererade binären diffa, men själva funktionen ska alltid ge samma utdata vid givet indata. GCC4 kompilerat med GCC3 ska ju helt klart ge samma resultat på en cpp-fil som GCC4 kompilerat med GCC4.

Visa signatur

void@qnet
teeworlds, stålverk80, evil schemer, c, c++
Languages shape the way we think, or don't.

Permalänk
Medlem

jag använder SciTe + GCC oavsett om jag sitter på en windows eller *nix-burk.
Mest för att jag inte orkar vänta på att IDEt ska starta och att man har samma miljö överallt, dvs inte behöver lära sig två olika.
använder även SciTe till python och javakodning, funkar lika bra där.
http://www.scintilla.org/SciTE.html

Visa signatur