std::list::sort() - Mengapakah Bertukar Secara Tiba-tiba kepada Strategi Atas Bawah?
Dalam Visual Studio 2015, pelaksanaan std::list::sort() mengalami perubahan ketara daripada isihan cantuman bawah ke atas klasik kepada isihan cantuman atas-bawah. Anjakan ini memperkenalkan ketidakcekapan yang jelas dengan memerlukan titik tengah senarai ditemui untuk setiap tahap rekursi.
Sebab Perubahan:
Walau bagaimanapun, seperti yang didokumenkan dalam kemas kini yang disediakan, Microsoft membuat pengoptimuman untuk mengekalkan tiada peruntukan memori dan pembetulan keselamatan pengecualian yang mendorong perubahan awal untuk menggunakan iterator. Khususnya, pelaksanaan rekursif:
Perbandingan dengan Isih Gabungan Bawah Atas:
Walaupun telah dioptimumkan, pendekatan atas ke bawah masih berpotensi menjadi lebih perlahan daripada isihan gabungan bawah ke atas apabila berurusan dengan senarai terpaut yang besar dan berselerak disebabkan oleh kesilapan cache yang meningkat.
Pelaksanaan Alternatif:
Pelaksanaan alternatif disediakan yang mengekalkan pendekatan isihan cantum bawah ke atas sambil menggunakan iterator dan bukannya tatasusunan senarai. Pendekatan ini bertujuan untuk mengelakkan pencapaian prestasi yang sentiasa perlu mencari titik tengah senarai semasa rekursi.
Kesimpulan:
Suis kepada isihan gabungan atas ke bawah dalam Visual Studio 2015 tidak dibuat secara sesuka hati. Microsoft melaksanakan pengoptimuman untuk menangani potensi ketidakcekapan, sambil mengekalkan faedah keselamatan pengecualian dan mengurangkan peruntukan memori. Walau bagaimanapun, untuk senarai terpaut yang besar dan jarang penduduknya, pendekatan isihan cantum bawah ke atas mungkin masih memberikan prestasi yang lebih baik.
Atas ialah kandungan terperinci Mengapa Visual Studio 2015 bertukar dari bawah ke atas ke atas bawah isihan gabungan untuk std::list::sort()?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!