什么是最快分配和无动态大小的数组对象作为局部变量的方法?
这是标准但最慢的方式:
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);
}
有没有更好的方法兼顾性能和方便性?
答案 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调用。但它不一定更快。