堆栈中的对象与C ++中的堆中的对象
这个问题在这里已经有了答案:
堆栈中的对象具有非常整洁的属性,支持它们的内存在堆栈框架结束时自动释放(例如,当函数返回时).C ++通过在所有堆栈对象脱落时 也调用析构函数来扩展此概念(即在函数返回之前抛出异常的情况下,它们仍然被释放)。由于这使内存管理变得非常简单,并且内存管理错误具有易于制作和难以检测的令人沮丧的组合,堆栈分配只要可行,应该是首选。
堆栈分配对象的缺点是......好吧......当函数返回时它们被删除。 有时候有理由希望物体寿命更长。 在这些情况下,你别无选择,只能从堆中分配。
还有一点需要考虑的是堆栈分配必须是在编译软件时已知的大小(但在某些平台上可以看到alloca函数可用)。有很多现实世界的场景你不知道直到程序运行你需要的内存。 以例如地址簿应用程序为例。 如果我正在编写这样一个应用程序,我显然不知道最终用户将在他们的地址簿中需要多少人。 用户必须告诉程序该信息。 在这种情况下,你需要有动态分配的内存,所以你再次考虑堆分配。
堆栈几乎总是可取的。 你的对象可以管理堆上的数据,比如std::string
,在这种情况下,对象本身在堆栈上维护(就像任何其他局部变量一样),并且字符串数据在堆上。
堆栈很快。 堆很慢。 该堆栈用于小数据。 堆是用于大数据的。
希望这可以帮助。
链接地址: http://www.djcxy.com/p/79805.html