64 Bit Programmierung?



  • ich wollte heute meinen pc neu aufsetzen und mich dann an mein erstes 64 bit projekt wagen. jetzt frage ich mich, ob uint32_t langsamer als uint64_t ist? und muss ich iwas bestimmtes beachten 😕



  • Kommt drauf an! Manchmal nimmt er das volle Register und manchmal stutzt er den Inhalt des Registers auf die vorgeschriebene Groesse mit einer zusaetzlichen Instruktion. Einfache Loesung: Verwende doch einfach (unsigned) int oder long long und ueberlasse es dem Compiler.



  • knivil schrieb:

    Kommt drauf an! Manchmal nimmt er das volle Register und manchmal stutzt er den Inhalt des Registers auf die vorgeschriebene Groesse mit einer zusaetzlichen Instruktion.

    also langsamer? oder eher al/ax/eax mäßig?

    knivil schrieb:

    Einfache Loesung: Verwende doch einfach (unsigned) int und ueberlasse es dem Compiler.

    aber der kann ja nicht wissen, dass ich nur 32 und keine 64 bit brauch 😕



  • kellerassel schrieb:

    aber der kann ja nicht wissen, dass ich nur 32 und keine 64 bit brauch 😕

    Nein, wenn es explizit eine Rolle spielt, dann ist es natuerlich sinnvoll es mit anzugeben. Es besteht ein Unterschied zwischen brauchen und Rolle spielen. Beim Iterieren ueber Arrays nehme ich standardmaessig auch unsigned int, obwohl meine Arrays selten mehr als 5000 lang sind.



  • vllt. statt uint32_t lieber sowas uint_fast32_t 👍



  • knivil schrieb:

    Beim Iterieren ueber Arrays nehme ich standardmaessig auch unsigned int, obwohl meine Arrays selten mehr als 5000 lang sind.

    die variable geht ja auch auf den stack... man muss ja nicht gleich geizig werden - bischen sparsam reicht 😉



  • ich bekomm jetzt end viele fehler - wie komm ich aus der nummer wieder raus? 😞

    field precision should have type ‘int’, but argument 2 has type ‘size_t’

    printf("%.*s"
    	,str_len
    	,str
    );
    

    str_len ist ein size_t, das soll auch so bleiben 😞



  • das ist doch zum kotzen, ich leg mich erst mal ne runde hin - zum runterkommen. 😡



  • kellerassel schrieb:

    field precision should have type ‘int’, but argument 2 has type ‘size_t’

    printf("%.*s"
    	,str_len
    	,str
    );
    

    str_len ist ein size_t, das soll auch so bleiben 😞

    Versuchs mal mit

    printf("%.*s", static_cast<int>(str_len), str);
    

    Clang:

    warning: field precision should have type 'int', but argument has type 'size_t' (aka 'unsigned long') [-Wformat]
            std::printf("%.*s"
                         ~~^~
    


  • knivil schrieb:

    kellerassel schrieb:

    aber der kann ja nicht wissen, dass ich nur 32 und keine 64 bit brauch 😕

    Nein, wenn es explizit eine Rolle spielt, dann ist es natuerlich sinnvoll es mit anzugeben. Es besteht ein Unterschied zwischen brauchen und Rolle spielen. Beim Iterieren ueber Arrays nehme ich standardmaessig auch unsigned int, obwohl meine Arrays selten mehr als 5000 lang sind.

    Wieso "obwohl"?
    Warum nimmst du überhaupt den falschen Typ und nicht einfach size_t ?



  • Cyres schrieb:

    printf("%.*s", static_cast<int>(str_len), str);
    

    wenn schon dann (int)str_len, aber das ist einfach hässlich und im schlaf ist mir leider auch keine gute idee gekommen 😞



  • scheinbar muss man alles auf fwrite umschreiben. lustig, hab mir meinen tag heute anders vorgestellt, als debugfunktionen umzuschreiben...



  • TyRoXx schrieb:

    Warum nimmst du überhaupt den falschen Typ und nicht einfach size_t ?

    Weill ich faul bin.


Log in to reply