/ *我有两个班。一种是为其成员在堆栈上分配内存,而另一种是在堆上分配。请参见下面的代码段。* /
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;
};
/ * class A_Heap的效率较低,因为在堆上分配内存会导致从用户模式到内核模式的两次上下文切换? * /
在C ++中,堆栈分配更有效吗??
是,就时间而言。
出于明显的原因,通常在堆栈使用方面不是。
...在一个对象内分配多个数据时?
仍然是。
请注意,绝对而言,分配成本可能很小。因此,效率的差异是否显着取决于您执行的分配数量。
请注意,A_Stack
是一个很大的对象。它们中只有极少数适合通常大小的堆栈,并且该空间与所有其他自动变量共享。如果不小心处理,则在堆栈上创建此类对象很可能导致堆栈溢出。
您可以做的是动态分配单个A_Stack
对象。这样可以最大程度地减少动态分配的数量,同时又不会耗尽所有堆栈空间。