C++-C++开发中stack和heap的选择

C++-C++开发中stack和heap的选择

归属感 发布于 2017-07-25 字数 156 浏览 1128 回复 3

我知道小的放在栈上,大的放堆上,想请教在实际的编程中,多大算大?选择的时候有什么标准吗?我现在有时候会用1MB的栈空间,选择的时候需要多线程编程情况吗?

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

归属感 2017-10-31 3 楼

如果使用自定义1M的堆栈变量,确实太大,不如用堆内存,函数返回之前记得释放就可以,理论上可以用堆栈空间的变量同时也可以使用堆内存作为替代方案,那么作为替代的堆内存变量生存期按理也是很短,不会超出函数之外,只要返回值前释放即可。一般比如定义Int, char,float非数组类型的内置类型变量完全可以用堆栈局部变量来存储。

清晨说ぺ晚安 2017-09-05 2 楼

在windows中,栈是向低地址扩展的数据结构,是一块连续的内存区域。也就是栈顶的地址和栈的最大容量(windows是2M)是系统规定好的。如果申请的空间超过剩余栈空间,将提示overflow,因此从栈获得的空间较小。
堆是向高地址扩展的数据结构,是不连续的内存区域。堆的大小受限于系统中有效的虚拟内存。由此可见堆的内存获得比较灵活,空间较大。
所以建议超过1MB都是heap内存吧。

归属感 2017-09-02 1 楼

一般申请大内存(如:1MB以上)使用堆。使用heap要注意释放问题。栈作为局部变量的存储结构,函数返回后编译器或系统自动释放栈空间。堆若多线程情况下能访问到,需要上锁。栈在函数内使用,无需考虑多线程情况。