C++ ungeeignet für 64K Demos?



  • hier ein kleines Beispiel:

    #include <iostream>
    
    using namespace std;
    
    template<unsigned int N>
    inline void schreibNMal(const char s[])
    {	
    	schreibNMal<N-1>(s);
    	cout<<N<<": "<<s;
    }
    
    template<>
    inline void schreibNMal<1>(const char s[])
    {
    	cout<<"1: "<<s;
    }
    
    int main()
    {
    	schreibNMal<5>("unroll ohne compiler optionen\n");
    	cin.get();
    }
    


  • Das lohnt sich wohl nur bei so kleinen Loops, dass man es gleich selbst n-fach schreiben
    kann 😉 Aber okay, es sieht cooler aus 🤡



  • @Bunny
    eine klasse ist fehlerhaft!



  • Hi,

    hier ein kleines C++-Beispiel:

    #include <iostream>
    #include <string>
    #include <sstream>
    
    int main(int argc, char* argv[])
    {
      try
      {
        double sum = 0;
        for (int a = 1; a < argc; ++a)
        {
          double w;
          std::istringstream in(argv[a]);
          if (in >> w)
            sum += w;
        }
        std::cout << "Die Summe ist " << sum << std::endl;
      }
      catch (const std::exception& e)
      {
        std::cerr << e.what() << std::endl;
      }
    }
    

    Unter SuSE-Linux 9.3 x86-64 mit "g++ -o ttt -O2 ttt.cpp" compliziert und mit "strip ttt" noch die Debug-infos raus. Das Ergebnis sind 19760 Bytes. Das ist noch weit weg vom 64k-Limit. Und das Trotz std::string, std::iostream, std::istringstream, exception-handling. Und das sogar auf einer 64-Bit-Plattform. Kein Grund für eine eigene String-Klasse.

    Solltet Ihr auf ein wesentlich anderes Ergebnis kommen, dann solltet Ihr vielleicht den Compiler wechseln. Alte Compiler hatten da so ihre Probleme.

    Templates sind praktisch Makros. Alles was nicht verwendet wird, wird auch nicht implementiert. Eine Template-Klasse darf jede Menge Zeugs mit bringen. Wenn es nicht verwendet wird, taucht es im binary nicht auf. Das geht sogar so weit, daß nicht verwendeter Template-code gewisse Fehler enthalten darf, wie z. B. Aufruf von nicht vorhandenen Methoden.



  • @tntnet! Hab es mal ausprobiert unter...

    VC++2003 Standard Edition: 112 KByte ohne Optimierung
    VC++2005 Beta 2 Express Edition: 7,5 KB ohne Optimierung



  • Artchi schrieb:

    @tntnet! Hab es mal ausprobiert unter...

    VC++2003 Standard Edition: 112 KByte ohne Optimierung
    VC++2005 Beta 2 Express Edition: 7,5 KB ohne Optimierung

    😮 😮 😮 😮 😮 😮 😮 👎 😮



  • @tntnet
    vorallem hast du den Code nicht auf Größe optimiert (-Os anstelle -O2)

    ich hab mit dem GCC 3.4 und folgenden Flags
    g++ -Wall -W -std=c++98 -Os -s -march=athlon-xp -mtune=athlon-xp -mfpmath=sse c++size.cpp
    ein 6,2K großes Binary erzeugt. Wobei man bei 64k demos wohl auch statisch linken muss, was wieder ein schlechtes Licht auf die STL wirft. Benutz mal das -static flag und zack ist das Binary 942K groß!



  • VC++ 2003: Release-Version, 104 kb (ohne Anpassung irgenwelcher Optionen)



  • Es kommt darauf an ob man die Laufzeitbibliothek statisch oder dynamisch dazu linkt. Dynamisch ist die Exe nur noch 5,5 KB groß, brauch dann aber ne DLL.



  • das heißt also das die templates nicht an der codegröße schuld sind.


Anmelden zum Antworten