C++,在对象内分配多个数据时,堆栈分配是否更有效? 在下面的程序中,类A_Heap的效率会更低吗?

in C++, is stack allocation is more efficient when allocating multiple data inside a object? class A_Heap will be less efficient in below program?

本文关键字:分配 程序 Heap 效率 有效 对象 数据 C++ 是否 堆栈 在下面      更新时间:2023-10-16

/* 我有两个类。一个是在堆栈上为其成员分配内存,而另一个是在堆上分配内存。请参阅下面的代码片段。

class A_Heap {
public:
A_Heap()
{
ptr = new char[256];
int_ptr = new int[1024];
}
private:
char * ptr;
int * int_ptr;
int abc;
char ch;
};
class A_Stack {
public:
A_Stack()
{
}
private:
char ptr[256];
int int_ptr[1024];
int abc;
char ch;
};

/*类A_Heap的效率会降低,因为在堆上分配内存会导致从用户模式到内核模式的两次上下文切换? */

在C++中,堆栈分配是否更有效率...?

是的,就时间而言。

就堆栈使用而言,通常不会,原因很明显。

。在一个对象内分配多个数据时?

还是的。

请注意,从绝对值来看,分配成本可能很小。因此,这种效率差异是否显著,可能取决于您执行的分配数量。

请注意,A_Stack是一个非常大的对象。它们中只有极少数适合通常大小的堆栈,并且该空间与所有其他自动变量共享。如果不小心处理,在堆栈上创建此类对象可能会导致堆栈溢出的高风险。

您可以做的是动态分配单个A_Stack对象。这最大限度地减少了动态分配的数量,同时仍然不会占用所有堆栈空间。

相关文章: