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

标签 c++ memory heap-memory

这个问题在这里已经有了答案:





Which is faster: Stack allocation or Heap allocation

(23 个回答)


1年前关闭。




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

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 会降低效率,因为在堆上分配内存会导致从用户模式到内核模式的两次上下文切换? */

最佳答案

in C++, is stack allocation is more efficient ...?



是的,就时间而言。

由于明显的原因,就堆栈使用而言,通常不是。

... when allocating multiple data inside a object?



还是可以的。

请注意,绝对而言,分配成本可能非常小。因此,这种效率差异是否显着,可能取决于您执行了多少分配。

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

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

关于c++ - 在 C++ 中,在对象内分配多个数据时,堆栈分配是否更有效? A_Heap 类在下面的程序中效率会降低吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61731148/

相关文章:

c - 程序 [X] 已触发断点,释放堆 block [A] 后在 [B] 处进行了修改

c++ - string.c_str() 需要解除分配吗?

c++ - 如何复制 strncat(原创)

c++ - std::atomic::load 的内存排序行为

C++、多语言/本地化支持

.net - 比较 .Net 和 VB6 应用程序的内存占用

c - 何时在 C 中使用位域

c++ - vector 结束迭代器

c - 可以将用户内存中的字符串传递给 printk 吗?

java - 我需要了解 Haskell 如何表示数据才能编写好的 Haskell 程序吗?