プログラムでパフォーマンスの問題を見つけようとしているため、プロファイリングを使用してコードをインストルメント化しました。gprof は、次のようなフラット プロファイルを作成します。
Flat profile:
Each sample counts as 0.01 seconds.
% cumulative self self total
time seconds seconds calls ms/call ms/call name
27.97 4.10 4.10 std::_Deque_iterator<char, char&, char*>::_Deque_iterator(std::_Deque_iterator<char, char&, char*> const&)
6.96 5.12 1.02 std::_Deque_iterator<char, char&, char*>::difference_type std::operator-<char, char&, char*>(std::_Deque_iterator<char, char&, char*> const&, std::_Deque_iterator<char, char&, char*> const&)
5.12 5.87 0.75 std::__deque_buf_size(unsigned int)
4.23 6.49 0.62 std::_Deque_iterator<char, char&, char*>::operator+=(int)
3.41 6.99 0.50 std::deque<char, std::allocator<char> >::begin()
1.91 7.27 0.28 7896 0.04 0.04 std::vector<MyClass, std::allocator<MyClass> >::_M_insert_aux(__gnu_cxx::__normal_iterator<MyClass*, std::vector<MyClass, MyClasst> > >, MyClassconst&)
1.91 7.55 0.28 std::deque<char, std::allocator<char> >::size() const
1.91 7.83 0.28 std::_Deque_iterator<char, char&, char*>::_S_buffer_size()
より短い時間で多くの行が続きます。
最初の質問: std::deque に問題があるように見えると信じるのは有効な仮定ですか? 問題は、std::deque を使用していることはわかっていますが、<char>
.
この仮定が正しい場合、コール スタックを見て、この両端キューがどこで使用されているかを確認することは理にかなっているようです。ただし、関連するすべてのエントリは!deque<char>
によってのみ呼び出されます。<spontaneous>
ほんの一例:
index % time self children called name
<spontaneous>
[1] 28.0 4.10 0.00 std::_Deque_iterator<char, char&, char*>::_Deque_iterator(std::_Deque_iterator<char, char&, char*> const&) [1]
この両端キューについて詳しく調べる方法はありますか?
ヒントをありがとう!