Nur eine kleine Anmerkung an GCCs memcpy



  • Jungs, was ist da denn schief gelaufen?
    http://ideone.com/GEdPp
    Assembler doch nicht so toll? 😃
    Vielleicht testet das mal jemand auf einem Linux System mit 4.7, weil irgendwie wäre das ein bisschen peinlich, oder nicht?



  • void my_copy(void* dst, const void* src, std::size_t size)
    {
      std::size_t pack_size = size / sizeof(long long);
      std::size_t leftover_size = size - pack_size * sizeof(long long);
    
      while (pack_size--)
                    *(long long*)dst = *(long long*)src;
    
      while (leftover_size--)
                    *(char*)dst = *(char*)src;
    }
    

    Wo werden denn da die Zeiger erhöht?



  • Außerdem muss das Alignment nicht stimmen.



  • okay. was haben wir denn da...oh. ja.

    undefiniertes Verhalten. strict aliasing und so.



  • TyRoXx schrieb:

    Wo werden denn da die Zeiger erhöht?

    Argh, an dem Fehler scheitert es sogar, wenn man die ersten paar Zeichen vergleicht und dann noch mit std::equal testet. Vielleicht sollte ich ins Bett gehen. Zumindest ist meine Welt wieder heile. 😉

    @Michael E., otze
    Na ja, auch wenn es undefiniert ist, darüber ist der Performanceunterschied nicht zu erklären.



  • cooky451 schrieb:

    Hi,

    um es kurz zu machen: Ich würde gerne etwas Geld verdienen, indem ich in vorzugsweise C oder C++ programmiere. Ich persönlich denke, dass ich das durchaus hinbekommen kann. (Wer hier öfter surft, sollte meine Fähigkeiten ja mehr oder weniger einschätzen können.) Mein Problem: Ich habe keine Referenzen. Also so gar keine. Ich habe weder an einem Kurs teilgenommen, noch habe ich irgendwelche Kontakte in Richtung Softwareentwicklung. Ich möchte zwar Informatik studieren, aber ich kann mich nicht mal für Studentenjobs bewerben, weil ich momentan noch Schüler bin.

    Irgendwelche hilfreichen Tipps? Oder bekommt man als Schüler halt einfach nichts in diesem Bereich?

    Besten Dank jedenfalls schon mal im Voraus.

    you made my day



  • KingKarl schrieb:

    you made my day

    Du surfst hier offenbar nicht so oft. 😉



  • otze schrieb:

    undefiniertes Verhalten. strict aliasing und so.

    Gibt es die "strict aliasing" Regel in C++?



  • Ich weiss zwar nicht was drin steht, aber da soll etwas zu
    "aliasing" stehen:
    C89/90 (6.3) und in C++98 (3.10/15)
    ob sich da bis C++11 etwas geändert hat 😕



  • Noch eine Präzision gefunden:
    C++98 (3.10/15)
    C++0x (3.10/10) -> C++0x und nicht C++11 - vorläufige Fassung?



  • cooky451 schrieb:

    KingKarl schrieb:

    you made my day

    Du surfst hier offenbar nicht so oft. 😉

    stimmt! denn ich surfe erst, wenn du dich nicht ins wasser traust...



  • f.-th. schrieb:

    Noch eine Präzision gefunden:
    C++98 (3.10/15)
    C++0x (3.10/10) -> C++0x und nicht C++11 - vorläufige Fassung?

    Also n3242 hat die Klausel in 3.10/10 noch stehen, glaube nicht, dass die das noch geändert haben.

    @Karl Was besseres ist dir nicht eingefallen? So kaufe ich dir aber keinen Staubsauger ab. 🤡


Anmelden zum Antworten