Ich arbeite mit einer Funktion auf dem kritischen Pfad. Der Code sieht so aus:Erstes Element im POD-Array initialisieren, verbleibende Elemente nicht initialisiert lassen
void ProcessData(const byte* input, size_t size)
{
ALIGN_ARRAY(16) int32_t m0[2] = { ((const int32_t*)input)[0] };
ALIGN_ARRAY(16) int32_t m1[2] = { ((const int32_t*)input)[1] };
...
}
Das erste Element, m0[0]
ist diejenige, die ich zu kümmern. Das zweite Element, m0[1]
, ist Speicherplatz und hält die Dinge in Ordnung, bevor m
an die SIMD-Engine ausgeliefert wird. m0[1]
wird mit einem Wert gefüllt, aber ich brauche es nicht initialisiert.
Dieser Code wird wiederholt und sehr einflussreich auf Benchmarking-Ergebnisse, so ist es wichtig, alles zu minimieren. Ich möchte, dass der Compiler weiß, dass er das erste Element initialisieren kann, weil der Code besser optimiert werden kann.
Wie stelle ich sicher, dass nur das erste Element initialisiert wird und die restlichen Elemente im Array nicht initialisiert sind? Ist es überhaupt möglich?
Diese Frage ist Gegenteil von Fragen wie Initialization of a normal array with one default value, Static array initialization of individual elements in C++ und Array initialization with {0}, {0,}?
ich auch bewusst bin, dass die Initialisierung als Zuordnung unterscheidet; und einige der Details von zero-, default- and value-initialization und wie PODs es beeinflussen.
Entweder initialisieren Sie nichts oder alles. Lassen Sie das Array in Ihrem Fall nicht initialisiert und weisen Sie es dann seinem ersten Element zu. –
Danke @KerrekSB. Ich hatte davor etwas Angst. Wenn das der Fall ist, dann können Sie auch für das Protokoll antworten. – jww