在实时环境中使用C++预分配内存

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)

然而,使用模板工作并不是很有趣(现在让我们重新编译所有内容,因为我更改了注释!),并且它强制我在使用此功能时进行一些簿记.

这个问题有没有更好的设计?

APr*_*mer 3

我不明白你如何才能准确地得到你所描述的内容。这样的事情对你来说可能是一个很好的妥协。

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)