DMAコントローラーのモジュロ機能を使用してリングバッファーを実装できるように、サイズに合わせて調整されたメモリバッファーを実現しようとしています。memalign を使用してこれを実行できることはわかっていますが、動的メモリを回避できたので、スタック上で実行できるかどうか疑問に思っています。私は GCC 4.4.1 を使用していますが、移植性 (組み込みシステム) は気にしません。
私は次のようなことをしたい:
template<uint16_t num_channels, uint16_t buffer_size>
class sampler {
__attribute__((aligned(buffer_size * num_channels * 2)))
uint16_t buffer[buffer_size][num_channels];
};
しかしもちろん、GCC は非定数アライメントを受け入れません (そして、アライメント > 8 は受け入れられない可能性があることを示しているようです)。
これを実現するために C++0x alignas() を使用できると思いますが、バージョン 4.8 まで GCC には表示されないようです。
1 つのオプションとして、バッファーのサイズを 2 倍にすることも考えられますが、それでは多くのスペースが無駄になるようです (このバッファーにデバイス メモリのかなりの部分を使用することを計画しています)。たぶん、あきらめて動的メモリを使用する必要があります。memalign は無駄なスペースという点で比較的効率的ですか?
何か案は?