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

标签 c++ memory-management real-time

我有一个函数可以获取 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/

相关文章:

iphone内存管理和数组

c++ - C++0x 中的缩小转换。只是我,还是这听起来像是一个重大变化?

c++ - 桶排序还是归并排序?

c++ - 在 C/C++ 中将两个大数相乘

c++ - 在 CUDA 中实现可变长度(本地)数组的等价物

operating-system - ThreadX 的哪些方面使其成为实时操作系统?

c++ - CLion 找不到 CMake 生成的 header ?

c++ - 返回 char* 函数的内存管理

javascript - Leaflet实时GeoJSON动态标记颜色变化

php - gmail 和 Github 等 laravel 实时应用程序的要求