Heim > Artikel > Backend-Entwicklung > Warum hat Visual Studio 2015 für std::list::sort() von der Zusammenführungssortierung von unten nach oben auf die Zusammenführungssortierung von oben nach unten umgestellt?
std::list::sort() – Warum der plötzliche Wechsel zur Top-Down-Strategie?
In Visual Studio 2015 ist die Die Implementierung von std::list::sort() erfuhr eine wesentliche Änderung von der klassischen Zusammenführungssortierung von unten nach oben zu einer Zusammenführungssortierung von oben nach unten. Diese Verschiebung führte zu einer offensichtlichen Ineffizienz, da für jede Rekursionsebene der Mittelpunkt der Liste ermittelt werden musste.
Gründe für die Änderung:
Jedoch wie in dokumentiert Mit dem bereitgestellten Update hat Microsoft Optimierungen vorgenommen, um die Fehlerbehebungen ohne Speicherzuweisung und Ausnahmesicherheit beizubehalten, die den ursprünglichen Wechsel zur Verwendung von Iteratoren motivierten. Insbesondere die rekursive Implementierung:
Vergleich mit der Bottom-Up-Merge-Sortierung:
Trotz der Optimierungen kann der Top-Down-Ansatz immer noch langsamer sein als die Bottom-Up-Merge-Sortierung, wenn es um große, verstreute verknüpfte Listen geht, da es häufiger zu Cache-Fehlern kommt.
Alternative Implementierung:
Es wird eine alternative Implementierung bereitgestellt, die den Bottom-Up-Merge-Sortier-Ansatz beibehält und gleichzeitig Iteratoren anstelle eines Arrays von Listen verwendet. Dieser Ansatz zielt darauf ab, den Leistungseinbruch zu vermeiden, der dadurch entsteht, dass bei der Rekursion immer der Mittelpunkt der Liste gefunden werden muss.
Fazit:
Der Wechsel zu einer Top-Down-Zusammenführungssortierung in Visual Studio 2015 entstand nicht aus einer Laune heraus. Microsoft hat Optimierungen implementiert, um potenzielle Ineffizienzen zu beheben und gleichzeitig die Vorteile der Ausnahmesicherheit und der Reduzierung der Speicherzuweisung beizubehalten. Bei großen, dünn besiedelten verknüpften Listen kann jedoch ein Bottom-up-Zusammenführungssortierungsansatz immer noch eine bessere Leistung liefern.
Das obige ist der detaillierte Inhalt vonWarum hat Visual Studio 2015 für std::list::sort() von der Zusammenführungssortierung von unten nach oben auf die Zusammenführungssortierung von oben nach unten umgestellt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!