堆栈中的对象与C ++中的堆中的对象

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

  • 什么和堆栈和堆在哪里? 25个答案

  • 堆栈中的对象具有非常整洁的属性,支持它们的内存在堆栈框架结束时自动释放(例如,当函数返回时).C ++通过在所有堆栈对象脱落 调用析构函数来扩展此概念(即在函数返回之前抛出异常的情况下,它们仍然被释放)。由于这使内存管理变得非常简单,并且内存管理错误具有易于制作和难以检测的令人沮丧的组合,堆栈分配只要可行,应该是首选。

    堆栈分配对象的缺点是......好吧......当函数返回时它们被删除。 有时候有理由希望物体寿命更长。 在这些情况下,你别无选择,只能从堆中分配。

    还有一点需要考虑的是堆栈分配必须是在编译软件时已知的大小(但在某些平台上可以看到alloca函数可用)。有很多现实世界的场景你不知道直到程序运行你需要的内存。 以例如地址簿应用程序为例。 如果我正在编写这样一个应用程序,我显然不知道最终用户将在他们的地址簿中需要多少人。 用户必须告诉程序该信息。 在这种情况下,你需要有动态分配的内存,所以你再次考虑堆分配。


    堆栈几乎总是可取的。 你的对象可以管理堆上的数据,比如std::string ,在这种情况下,对象本身在堆栈上维护(就像任何其他局部变量一样),并且字符串数据在堆上。

    堆栈很快。 堆很慢。 该堆栈用于小数据。 堆是用于大数据的。

    希望这可以帮助。

    链接地址: http://www.djcxy.com/p/79805.html

    上一篇: Objects on a stack vs Objects on a heap in C++

    下一篇: How to properly deallocate variables in deconstructor