我有一个函数可以获取 n
字节的输入缓冲区,并且需要一个 n
字节的辅助缓冲区来处理给定的输入缓冲区。
(我知道 vector 在运行时分配内存,假设我正在使用一个使用静态预分配内存的 vector 。假设这不是一个 STL vector 。)
通常的做法是
void processData(vector<T> &vec) {
vector<T> &aux = new vector<T>(vec.size()); //dynamically allocate memory
// process data
}
//usage:
processData(v)
由于我在实时环境中工作,我希望预先分配我需要的所有内存。
缓冲区只在启动时分配一次。我希望每当我分配一个 vector 时,我都会自动为我的 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);
然而,大量使用模板并不是很有趣(现在让我们重新编译所有内容,因为我更改了评论!),并且它迫使我在使用此功能时做一些簿记。
围绕这个问题有没有更好的设计?
最佳答案
我不明白你怎么能准确地得到你所描述的。像这样的事情对你来说可能是一个很好的妥协。
void processData(vector<T>& vec)
{
static vector<T> aux(vec.size());
if (vec.size() > aux.size()) {
aux.resize(vec.size());
}
...
}
关于c++ - 在实时环境中使用 C++ 预分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2819059/