最快分配和无动态大小的数组对象作为局部变量的方法

时间:2015-04-24 03:11:25

标签: 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);
}

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

2 个答案:

答案 0 :(得分:3)

创建一个名为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_);
}

答案 1 :(得分:-1)

没有兼顾性能和便利性的方法。几乎在所有情况下都应该使用 new 。如果您在有限的环境中需要性能,则应使用 placement new 。如果您牺牲了可移植性,您可以使用像HeapAlloc这样的API调用。但它不一定更快。