Welche Funktion ist schneller: strcmp oder strlen?



  • gähn
    🙄



  • Es wird volkard überraschen, aber als ich das letzte mal C++ programmiert habe, habe ich immer brav const& Schnittstellen gemacht, bis ich irgendwann gemerkt habe, dass in-place-ändern doch besser wäre. In der Folge musste ich immer alles kopieren, was die Performance massiv beeinträchtigt hat. Seither bleibe ich in C bei dummen structs und klugen Algorithmen.

    C ist eine Sprache für Profis und sollte nur von Profis verwendet werden.

    👍



  • C ist eine Sprache für Profis und sollte nur von Profis verwendet werden.

    full ack! 👍



  • objdump schrieb:

    Es wird volkard überraschen, aber als ich das letzte mal C++ programmiert habe, habe ich immer brav const& Schnittstellen gemacht, bis ich irgendwann gemerkt habe, dass in-place-ändern doch besser wäre. In der Folge musste ich immer alles kopieren, was die Performance massiv beeinträchtigt hat. Seither bleibe ich in C bei dummen structs und klugen Algorithmen.

    Vielleicht haste nur die falschen C++-Bücher in der Hand gehabt. Wenn die Dir einen Stil einreden wollten, der bremst, ist klar, daß Du Dich da unwohl fühlst.



  • mhh, hätte ich gewusst, dass die ganze diskussion SO ausartet, hätte ich den thread nicht angefangen 🙄

    es geht hier NICHT um "c vs c++" sondern darum, welche funktion schneller ist.

    die antwort ist, sofern ich die beiträge, die meine frage beantwortet haben, richtig verstanden habe, strcmp.


  • Mod

    threadstarter schrieb:

    es geht hier NICHT um "c vs c++" sondern darum, welche funktion schneller ist.

    Um dieses Thema geht es in diesem Subforum immer 😃 . Warte nur, bis die ersten Java-Programmierer sich in die Diskussion einmischen…



  • SeppJ schrieb:

    threadstarter schrieb:

    es geht hier NICHT um "c vs c++" sondern darum, welche funktion schneller ist.

    Um dieses Thema geht es in diesem Subforum immer 😃 . Warte nur, bis die ersten Java-Programmierer sich in die Diskussion einmischen…

    Und wenn volkard aktiv ist irgendwie viel öfters. Eigentlich hatten wir doch schon länger keinen solchen Thread mehr.



  • --c++ schrieb:

    1. strcmp(suchbegriff,listenbegriff)
    wenn 0 -> begriff gefunden.

    Wenn du sicherstellen kannst, dass Speicherbereiche direkt nach den zu suchenden Strings von deinem Prozess lesbar sind, kannst du auch

    memcmp(s,suchstr,strlen(suchstr)+1)
    

    verwenden, das spart den für deinen Fall unnötigen lexikografischen Anteil in strcmp, evtl. spendiert dein Compiler auch einen direktne schnellen asm-Befehl(e) dafür.



  • SeppJ schrieb:

    threadstarter schrieb:

    es geht hier NICHT um "c vs c++" sondern darum, welche funktion schneller ist.

    Um dieses Thema geht es in diesem Subforum immer 😃 . Warte nur, bis die ersten Java-Programmierer sich in die Diskussion einmischen…

    C ist eine Programmiersprache von Profis für Profis. 👍
    Java ist eine Programmiersprache von Deppen für Deppen.
    C++ liegt irgendwo dazwischen.



  • Wutz schrieb:

    SeppJ schrieb:

    threadstarter schrieb:

    es geht hier NICHT um "c vs c++" sondern darum, welche funktion schneller ist.

    Um dieses Thema geht es in diesem Subforum immer 😃 . Warte nur, bis die ersten Java-Programmierer sich in die Diskussion einmischen…

    C ist eine Programmiersprache von Profis für Profis. 👍
    Java ist eine Programmiersprache von Deppen für Deppen.
    C++ liegt irgendwo dazwischen.

    Ich glaub das nicht, C und Java sind zwei Worst Case Szenarien und C++ befindet sich weit weg in eine andere Dimension - also es kann nicht dazwischen liegen 😛



  • Wutz schrieb:

    --c++ schrieb:

    1. strcmp(suchbegriff,listenbegriff)
    wenn 0 -> begriff gefunden.

    Wenn du sicherstellen kannst, dass Speicherbereiche direkt nach den zu suchenden Strings von deinem Prozess lesbar sind, kannst du auch

    memcmp(s,suchstr,strlen(suchstr)+1)
    

    verwenden, das spart den für deinen Fall unnötigen lexikografischen Anteil in strcmp, evtl. spendiert dein Compiler auch einen direktne schnellen asm-Befehl(e) dafür.

    aber da muss auch strlen aufgerufen werden.

    strcmp braucht kein strlen, also ist strcmp schneller als memcmp



  • Wutz schrieb:

    SeppJ schrieb:

    threadstarter schrieb:

    es geht hier NICHT um "c vs c++" sondern darum, welche funktion schneller ist.

    Um dieses Thema geht es in diesem Subforum immer 😃 . Warte nur, bis die ersten Java-Programmierer sich in die Diskussion einmischen…

    C ist eine Programmiersprache von Profis für Profis. 👍
    Java ist eine Programmiersprache von Deppen für Deppen.
    C++ liegt irgendwo dazwischen.

    LOL



  • C ist eine Programmiersprache von Profis für Profis. 👍
    Java ist eine Programmiersprache von Deppen für Deppen.
    C++ liegt irgendwo dazwischen.

    Aha, mal wieder ein typischer Schwanzvergleich.

    Dachte schon es ginge ums programmieren. 🙂



  • ...



  • Swordfish schrieb:

    Es liegt doch auf der Hand, das C in allen Fällen schneller sein muss!

    Das sagt ein C-Programmierer.

    Ein C++-Programmierer sagt dies und ein Java-Programmierer sagt das (sofern er genug Intelligenz besitzt, um sich klar artikulieren zu können).

    C ist eine Sprache, die von Anfang an auf Schnelligkeit entworfen wurde.
    Deshalb hat C wahrscheinlich in Tests die Nase vorn.



  • perverser schrieb:

    C ist eine Sprache, die von Anfang an auf Schnelligkeit entworfen wurde.
    Deshalb hat C wahrscheinlich in Tests die Nase vorn.

    C++ wurde als Erweiterung von C entworfen, die genauso schnell ist.
    Sämtliche C++ Konstrukte kosten nicht mehr als per Hand in C nachgebaut.



  • ...



  • Da grundsätzlich erstmal die gleichen (lowlevel-)Mittel (zuzüglich weiterer; Ausnahme ist "restrict") zur Verfügung stehen wie bei C und beides (oft vom gleichen Compiler) zu Maschinencode kompiliert wird, gibt es keinen prinzipiellen Geschwindigkeitsunterschied. Wenn ein Programm dadurch langsamer wird, dass man es als C++-Code übersetzt, würde ich das auf den Compiler schieben.



  • ...



  • @Mr X
    Was einem bei C++ ein wenig reinscheissen kann sind Aufrufe über Funktionszeiger bzw. Aufrufe von Code in DLLs/SOs.

    Wenn man es dem Compiler nämlich nicht anders sagt, gehen die meisten Compiler davon aus dass die so aufgerufenen Funktionen Exceptions werfen können, und müssen dementsprechend den nötigen Verwaltungscode in die aufrufende Funktion einbauen.
    Weil halt, soweit ich weiss, noch kein Compiler das Suchen des zuständigen Handlers und das Stack-Unwinding 100% table-driven erledigen kann.

    So lange man reinen C-Style Code schreibt, also keine Destruktoren etc. verwendet, sollte es allerdings wirklich egal sein. Weil ja dann auch kein Exception-Verwaltungscode in den aufrufenden Funktionen anfällt.


Anmelden zum Antworten