可能な限り軽量な非常に大きなサイズ(KBよりもMB以上)のrawバッファーが必要です。データを動的な領域に保持してもらいたいのですが、必ずしも拡張可能である必要はありません。サイズは構築時に設定します。
私は考えましstd::vector<unsigned char>
たが:
std::vector<unsigned char> a(VERY_BIG_SIZE);
データが初期化されています0
-これは必要ありません、お金を払いたくないです...これはすでにCPU / RAMの使用率が高い組み込みシステムであり、メモリが割り当てられているが、 usedは仮想的にのみ割り当てられます(つまり、ある程度のアドレススペースが必要ですが、使用されない限り、実際のメモリにマップされません)。
私も考えました:
std::vector<unsigned char> a;
a.reserve(VERY_BIG_SIZE);
std::copy(someData..., a.begin());
意外と期待通りに動作します(どういうわけかこのUBだと思います)-そしてa
メモリ全体が初期化されていませんが、すでにお気づきのように、a
他のベクトルにコピーすることはできません(a.begin()== a.end())
...。
push_back(...)/insert(a.end(), ...)/assign(...)
2番目のアプローチでやらなかった理由をどうにかして説明する必要があります。
私はすでに一定のサイズのテンプレートクラスBufferを持っています:
template <size_t SIZE>
class Buffer {
public:
// this "dirty" solution works, but I would need to add copy stuff by myself...
Buffer() { data.reserve(SIZE); }
// this "correct" solution is too heavy:
Buffer() : data(SIZE) { }
unsigned char* data() const { return &data[0]; }
private:
std::vector<unsigned char> data;
// unsigned char data[SIZE]; // this is not an option because it is not dynamic memory
};
私がプライベートに入れることができるものはありますか?Buffer
それはメモリ管理を処理し、コピー可能で初期化されません...そしてメモリは動的に割り当てられます(std :: Vectorのように)。それがunsigned char data[SIZE];
オプションではない理由です。
何か案は?