私は現在、C++を使っていくつかのDSPアルゴリズムを実装しようとしていますが、私が効率的であるかどうかについて興味があります。DSPアプリケーション用のstd :: vectorオブジェクトを使用するのは効果がありませんか?
私は、一連の入力が与えられたときにフィルタリングされた出力を生成する 'DigitalFilter'クラスを設計しようとしています。今私が直面している問題は、フィルタのサイズ(すなわち、フィルタ係数の数)が変化し得ることである。したがって、DigitalFilterクラスインスタンスのサイズは異なります。例えば、DigitalFilterの1つのインスタンスは、4つのフィルタ係数を保持する必要があり、別のインスタンスは90のフィルタ係数を保持する必要があります。
これらの係数を保持する明白で簡単な方法は、std :: vectorオブジェクトを使用してこれらの係数を保持することです。このオブジェクトは本質的にサイズが変わる可能性があり、私のアプリケーションには適しているようです。
しかし、私はヒープ割り当てメモリ(スタックメモリとは対照的に)を使用して実装されていることも知っています。したがって、フィルタを設定し、それを使用して数学的に集中的な計算を行うと、ヒープデータを常に参照しています。私は、ベクトルに関連する一般的なコストは、ベクトルが大きすぎてメモリの元の場所に収まらない場合にメモリの場所を完全に再配置する必要があることを認識していますが、フィルタリング操作が開始される前にサイズが調整されます。しかし、私はまだ効率が不思議です。
私の質問:ヒープデータとスタックデータの参照にはどのような時間がかかるでしょうか?プロセッサのキャッシュメモリが高速アクセスのためにこのヒープデータを保持する可能性はありますか?
プロセッサキャッシュは、スタックまたはヒープに関係なく、最も頻繁にアクセスしているものに保持されます。差をつけるべき唯一のことは、あなたがアクセスしているものがメモリに緊密に詰まっているかどうかです。 –
@ MarkRansomあなたと100%一致します。 [私の答え](http://stackoverflow.com/a/40451860/4433386)で少しの経験で拡張されました。 –