Status der "Memset" -Funktionalität in C ++ mit modernen Compilern

Kontext:

Vor einiger Zeit bin ich auf diesen DDJ-Artikel von Alexandrescu von 2001 gestoßen:http://www.ddj.com/cpp/184403799

Es geht darum, verschiedene Möglichkeiten zum Initialisieren eines Puffers mit einem bestimmten Wert zu vergleichen. Wie "memset" für Einzelbyte-Werte. Er verglich verschiedene Implementierungen (memcpy, explizite "for" -Schleife, Duffs Gerät) und fand nicht wirklich den besten Kandidaten für alle Datenmengengrößen und Compiler.

Zitat:

Es gibt eine sehr tiefe und traurige Erkenntnis, die all dem zugrunde liegt. Wir sind im Jahr 2001, dem Jahr der räumlichen Odyssee. (...) Steigen Sie einfach aus dem Kasten und schauen Sie uns an - nach 50 Jahren sind wir immer noch nicht so gut darin, Speicher zu füllen und zu kopieren.

Frage:Hat jemand aktuellere Informationen zu diesem Problem? Funktionieren aktuelle GCC- und Visual C ++ - Implementierungen wesentlich besser als vor sieben Jahren?Ich schreibe Code mit einer Lebensdauer von mehr als 5 Jahren (wahrscheinlich mehr als 10 Jahren), der die Größen von Arrays von wenigen Bytes bis zu Hunderten von Megabytes verarbeitet. Ich kann nicht davon ausgehen, dass meine Auswahl in 5 Jahren immer noch optimal ist. Was soll ich machen:a) Verwenden Sie das Memset (oder ein gleichwertiges Element) des Systems und vergessen Sie die optimale Leistung oder gehen Sie davon aus, dass Laufzeit und Compiler dies für mich erledigen.b) Ein für alle Mal Benchmarking auf verschiedenen Arraygrößen und Compilern durchführen und zur Laufzeit zwischen mehreren Routinen wechseln.c) Führen Sie den Benchmark bei der Programminitialisierung aus und wechseln Sie zur Laufzeit basierend auf genauen (?) Daten.

Bearbeiten: Ich arbeite an Bildbearbeitungssoftware. Meine Array-Elemente sind PODs und jede Millisekunde zählt!

Edit 2: Danke für die ersten Antworten, hier sind einige zusätzliche Informationen:

Die Pufferinitialisierung kann 20% -40% der Gesamtlaufzeit einiger Algorithmen ausmachen.Die Plattform kann in den nächsten 5+ Jahren variieren, obwohl sie in der Kategorie "Schnellster CPU-Kauf bei DELL" verbleibt. Compiler werden eine Form von GCC und Visual C ++ sein. Keine eingebetteten Sachen oder exotischen Architekturen auf dem RadarIch würde gerne von Leuten hören, die ihre Software aktualisieren mussten, als MMX und SSE auftauchten, da ich das Gleiche tun muss, wenn "SSE2015" verfügbar wird ... :)

Antworten auf die Frage(12)

Ihre Antwort auf die Frage