struct test_struct
{
test_struct() {}
~test_struct() {}
};
#include <vector>
#include <memory>
#include <cstdio>
int main()
{
printf("ctor begin\n");
{
std::vector<std::unique_ptr<test_struct>> test_vec;
const int count = 100000;
for (auto i = 0; i < count; i++) {
test_vec.emplace_back(new test_struct);
}
printf("dtor begin\n");
}
printf("dtor end\n");
}
私はVS2010を使用しています、といくつかのばかげたパフォーマンスの問題を発見しました。上のコードは、デバッグとリリースビルド(ctrl + f5)の両方でうまく動作しますが、デバッガが接続されている(f5)場合、unique_ptrクラスのdtorコールは耐え難いほど遅いです。結果のマシンコードはかなり最適化されているので、デバッガではなくコンパイラの問題ではないと思っていますが、対処方法はわかりません。私の質問はとてつもなく遅いのunique_ptrをデストラクタの呼び出し(MSVC)
- この問題はあなたのマシンで再現できますか?
- この現象の原因は何ですか?
- 回避策はありますか?
各プリント後にフラッシュを試してください。 – Pubby
@Pubby:違いはありません。それぞれのループ反復ごとに1つではなく、3つのprintfの合計があります。 –
VS2010 Express Editionでこれを再現することができました。 – RedX