Wenn ich meine App über Callgrind laufen ließ, stellte sich heraus, dass diese Zeile alles andere um den Faktor 10.000 übertraf. Ich werde es wahrscheinlich neu gestalten, aber es hat mich neugierig gemacht; Gibt es einen besseren Weg, es zu tun?Was ist die effizienteste Methode, x zusammenhängende Werte von y in einem Array zu finden?
Hier ist, was ich im Moment tun:
int i = 1;
while
(
(
(*(buffer++) == 0xffffffff && ++i) ||
(i = 1)
)
&&
i < desiredLength + 1
&&
buffer < bufferEnd
);
Es ist für den Offset des ersten Batzen desiredLength 0xffffffff Werte in einem 32-Bit unsigned int Array suchen.
Es ist deutlich schneller als alle Implementierungen, die ich mit einer inneren Schleife kommen könnte. Aber es ist immer noch zu verdammt langsam.
Eine Sache, die optimiert werden kann, ist die Lesbarkeit dieser Linie ... – Mysticial
Das ist besser. Aber muss * man * in den 'While'-Test gedrängt werden? – Mysticial
Haben Sie versucht, 'std :: search_n' -' std :: search_n (Puffer, PufferEnd, gewünschtLänge, 0xffffffff) ''? Ich stelle mir vor, dass es unter der Haube (möglicherweise) SIMD nutzen könnte. – porges