Gå til innhold

Linux og effektivitet ved kompilering


Anbefalte innlegg

Kompilerte et knøttlite c++ program i linux som jeg lagde i Windoze for et par måneder sida, og la merke til at filstørrelsen på linux binaryen var mye mindre enn Windoze sin. Windoze fila blei på 87.5 Kb mens linux fikk 17.9 Kb :o

Er det slik at linux er mye mer effektiv ved kompilering enn det Windoze er?

 

Kompilerte med Dev-cpp i windows og gcc i linux, og er helt newbie i c++

 

Her er koden:

#include <iostream.h>

#include <fstream.h>

#include <string.h>

int main()

{   cout<<endl;

   cout<<" ---------------------------------------------"<<endl;

   cout<<"|                   Factors                   |"<<endl;

   cout<<" ---------------------------------------------"<<endl<<endl;

   cout<<"By MarcelSB"<<endl<<endl;

   long int compare, divider;

   float input, temp;

   cout<<"Actions will be logged in "Facors.txt""<<endl<<endl;

   ofstream log("Factors.txt", ios::app);

   cout<<"Enter number to be factorized: ";

   cin>>input;

   int original=(int) input;

   cout<<endl;

   log<<"Factorizing "<<original<<": ";

   compare=original;

   if (input<=0)

   {   cout<<"The number must be positive..."<<endl;

       log<<"Error: The Number must be positive..."<<endl;

       cout<<endl<<"Thank you for using Factors..."<<endl<<endl;

       log.close();

       cout<<"Do you want to factorize another number? (0=no 1=yes) ";

       cin>>temp;

       if (temp==1)

           main();

       return 0;

   }

   if (input>2000000000)

   {   cout<<"The number must be below 2'000'000'000"<<endl;

       log<<"Error: The Number must be below 2'000'000'000..."<<endl;

       cout<<endl<<"Thank you for using Factors..."<<endl<<endl;

       log.close();

       cout<<"Do you want to factorize another number? (0=no 1=yes) ";

       cin>>temp;

       if (temp==1)

           main();

       return 0;

   }

   if (input!=compare)

   {   cout<<"The number must be an integer..."<<endl;

       log<<"Error: The Number must be an integer..."<<endl;

       cout<<endl<<"Thank you for using Factors..."<<endl<<endl;

           log.close();

       cout<<"Do you want to factorize another number? (0=no 1=yes) ";

       cin>>temp;

       if (temp==1)

           main();

       return 0;

   }

   cout<<"Factors of "<<original<<":"<<endl<<endl;

   for (divider=2; divider<input; divider++)

   {   temp=input/divider;

       compare=(int)temp;

       if (temp==compare)

       {       cout<<divider<<" * ";

               log<<divider<<" * ";

               input=input/divider;

               divider=1;

       }

   }

   if (input==original)

   {   cout<<"The number is a prime number, and has no factors..."<<endl;

       log<<"The number is a prime number, and has no factors..."<<endl;

   }

   else

   {   cout<<input<<" = "<<original<<endl;

       log<<input<<" = "<<original<<endl;

   }

   cout<<endl<<"Thank you for using Factors..."<<endl<<endl;

   log.close();

   cout<<"Do you want to factorize another number? (0=no 1=yes) ";

   cin>>temp;

   if (temp==1)

   {   cout<<endl<<"--------------------------------------------------------------------------------";

       main();

   }

   return 0;

}

 

Det er bare og cut'n'paste den er GNU :wink:

Ble litt lang den der :D

 

MarcelSB

Lenke til kommentar
Videoannonse
Annonse

Jeg dreiv å leika litt med sånne c++ tutorials i windows for en tid siden, og prøvde forskjellige compilatorer. Jeg fant ut at den ene lagde veldig store filer, og den andre lagde små filer, akkurat som du opplevde nå. Jeg husker ikke hvem compilatorer jeg brukte, men jeg mener den ene var en gratis c++ compilator fra borland. Jeg fant aldri ut av hvorfor det ble så stor forskjell i filstørrelsen, men de funka akkurat likt :-?

Lenke til kommentar

Er ikke Windows som bestemmer hvor effektiv kompilasjonen/linkingen er, i utgangspunktet. Det du må se på er hvilken kompilator du bruker og ... linker du statisk eller dynamisk? Så vidt jeg forsto linkes programmer dynamisk default i Linux, og du vil dermed få en mye mindre programfil, siden kode vil linkes inn ved kjøring.

Lenke til kommentar
Kompilerte et knøttlite c++ program i linux som jeg lagde i Windoze for et par måneder sida, og la merke til at filstørrelsen på linux binaryen var mye mindre enn Windoze sin. Windoze fila blei på 87.5 Kb mens linux fikk 17.9 Kb :o

Er det slik at linux er mye mer effektiv ved kompilering enn det Windoze er?

...

 

Vanskelig å si, kommer an på kompileringsopsjoner du gir til de forskjellige kompilatorene. Gir du feks debuggings-opsjoner i den ene, men ikke den andre får du automatisk store forskjeller. Men det ville ikke forbause meg om gcc/g++ var mer effektiv, for å si det sånn...

Lenke til kommentar

Hvilke kompilatorer brukte du? gcc er ikke kjent som den beste kompilatoren i verden, men den er defacto standard i Linux. Intel har jo en egen kompilator som ofte knuser gcc, men den kan ikke kompilerer f.eks. kjernen.

 

Hvilken versjon av gcc har også mye å si, samt hvilke flagg du tok med i kompileringen. Det kan tenkes at den større versjonen i Wintendo knuser den lille i Linux, fordi du optimaliserte med hensyn på størrelse i Linux, men hastighet i Wintendo.

 

Jeg tipper det er debugging, eller linking som gir deg forskjellen.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...