这篇文章主要为大家展示了“C/C++中栈stack和堆heap有什么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C/C++中栈stack和堆heap有什么用”这篇文章吧。
栈 (stack) 是为执行线程流出的内存空间. 堆 (head) 是为动态分配预留的空间.
我们以一段代码来举例:
#include <iostream> using namespace std; int a = 0; // 全局初始化区 char *pt; // 全局未初始化 int main() { int b; // b在栈区 char s[] = "abc"; // s在栈区 char *p1; // 在栈区 char *p2 = "123"; // "123"在常量区, p3在栈区 static int c = 0; // 全局静态初始化区 char *p3 = new char(65); // 在堆区 char *p4 = new char[10]; // 在堆区 return 0; }
栈区: 栈区是分配局部变量的空间, 处于相对较高的地址. 栈地址向下增长
堆区: 用于分配程序媛申请的内存空间, 是向上增长的
静态数据区: 分配静态变量, 全局变量的空间
只读区: 分配常量和程序代码
栈: 栈上的空间是自动分配回收的. 生存周期只在函数的运行过程中, 运行后就释放.
堆: 程序媛根据需要自己申请的空间, 只要程序媛不释放空间, 就一直可以访问到. 一旦忘记释放会造成内存泄漏.
栈: 只要栈的剩余空间大于所申请空间, 系统将为程序提供内存, 否则将报异常提示栈溢出. 响应速度快.
堆: 系统收到程序的申请时, 会遍历空闲内存地址的链表. 寻找第一个空间大于所申请空间的堆节点. 响应速度慢.
栈: 由系统自动分配, 速度较快, 程序媛无法控制.
堆: 由 new 分配, 一般速度较慢, 而且容易产生内存碎片, 不过用起来最方便.
栈: 在 Windows 下, 栈的大小是 2MB. 如果申请的空间超过栈的剩余空间时, 将提示overflow
(栈溢出).
堆: 堆的大小受限于计算机系统中有效的虚拟内存. 堆获得的空间比较灵活, 也比较大.
栈: 函数调用语句的下一条可执行语句的地址, 函数的各个参数, 函数中的局部变量.
堆: 具体内容由程序媛, 我们安排.
注: 当有指针数据成员时, 必须用深复制, 使其使用堆区的空间.
以上是“C/C++中栈stack和堆heap有什么用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。