我需要尽可能轻的非常大的原始缓冲区(比方说 MB 多于 KB)。我想让它把数据保存在动态区域中,不一定是可增长的,我会在构建时设置大小。
我想过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(...)
采用第二种方法。
我已经有固定大小的模板类缓冲区:
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];
不是一个选项。
有任何想法吗?