Ela*_*ich 7 c++ memory-management real-time
我有一个获取n
字节输入缓冲区的函数,需要一个n
字节的辅助缓冲区来处理给定的输入缓冲区.
(我知道vector在运行时分配内存,假设我正在使用一个使用静态预分配内存的向量.想象一下这不是一个STL向量.)
通常的做法是
void processData(vector<T> &vec) {
vector<T> &aux = new vector<T>(vec.size()); //dynamically allocate memory
// process data
}
//usage:
processData(v)
Run Code Online (Sandbox Code Playgroud)
由于我在一个实时环境中工作,我希望提前预先分配我需要的所有内存.
缓冲区在启动时仅分配一次.我希望每当我分配一个向量时,我都会自动为我的processData
函数分配辅助缓冲区.
我可以用模板功能做类似的事情
static void _processData(vector<T> &vec,vector<T> &aux) {
// process data
}
template<size_t sz>
void processData(vector<T> &vec) {
static aux_buffer[sz];
vector aux(vec.size(),aux_buffer); // use aux_buffer for the vector
_processData(vec,aux);
}
// usage:
processData<V_MAX_SIZE>(v);
Run Code Online (Sandbox Code Playgroud)
然而,使用模板工作并不是很有趣(现在让我们重新编译所有内容,因为我更改了注释!),并且它强制我在使用此功能时进行一些簿记.
这个问题有没有更好的设计?
我不明白你如何才能准确地得到你所描述的内容。这样的事情对你来说可能是一个很好的妥协。
void processData(vector<T>& vec)
{
static vector<T> aux(vec.size());
if (vec.size() > aux.size()) {
aux.resize(vec.size());
}
...
}
Run Code Online (Sandbox Code Playgroud)