c++ - 最快分配和释放动态大小数组对象作为局部变量的方法

标签 c++ memory-management

最快分配和释放动态大小数组对象作为局部变量的方法是什么?

这是标准但最慢的方法:

void func1(int n)
{
    int* array = new int[n];
    func2(array);
    delete array;
}

这是一种更好的方法,但它在某些编译器和操作系统中效果不佳,有时代码维护也很脆弱。

void func1(int n)
{
    int* array = _alloca(sizeof(int)*n);
    func2(array);
    _freea(array);
}

这是通用且快速的(我现在所做的),但这很麻烦,有时会遇到单例销毁顺序问题。

void func1(int n)
{
    int* array = pool_alloc(sizeof(int)*n);
    func2(array);
    pool_free(array);
}

有没有更好的方法兼顾性能和便利性?

最佳答案

创建一个名为 Buffer 的辅助类。

struct Buffer
{
   Buffer(size_t s = 100) : size_(s), data_(new char[s]) {}
   ~Buffer() { delete [] data_; }

   void assureMinSize(size_t s)
   {
       if ( s > size_ )
       {
          delete [] data_;
          size_ = s;
          data_ = new char[s];
       }
   } 

   size_t size_;
   char* data_;
};

并将其用作:

void func1(int n)
{
    static Buffer buffer;
    buffer.assureMinSize(n);
    func2(buffer.data_);
}

关于c++ - 最快分配和释放动态大小数组对象作为局部变量的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29838075/

相关文章:

C++ : passing ofstream& to function to continually append to . txt 文件

c++ - fstream、ofstream、ostream、iostream 之间的区别

c++ - `std::string` 分配是我当前的瓶颈 - 如何使用自定义分配器进行优化?

c++ - x64 进程在 4GB RAM 上可以占用多少内存

linux - 如果映射文件未显示在过程映射中,我如何找到它?

c++ - vector::erase() 未按预期工作

c++ - 用 C++ 解析二进制协议(protocol)的好库

c++ - 如何将键盘输入读取为字符串? (C++)

c++ - 动态分配对象数组

Android 在 BitmapFactory.decodeStream() 中重用流