全新论坛MCU智学网上线,欢迎访问新论坛!稀缺资源、技术干货、参考设计、原厂资料尽在MCU智学网
更新自动建库工具PCB Footprint Expert 2023.13 Pro / Library Expert 破解版

谁帮忙详细介绍一下,堆,栈,静态存储区

[复制链接]
3050 1

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
谁帮忙详细介绍一下,堆,栈,静态存储区,,不胜感激

举报

回复

1 个评论

匿名  发表于 2013-9-22 09:22:18
一、C++对内存中堆、栈、静态存储区的简单理解      1.堆:由程序员自己分配释放(用malloc和free,或new和delete) ,如果我们不手动释放,那就要到程序结束才释放。如果对分配的空间在不用的时候不释放而一味的分配,那么可能会引起内存泄漏,其容量取决于虚拟内存,较大。
  2.栈:由编译器自动分配释放,其中存放在主调函数中被调函数的下一句代码、函数参数和局部变量,容量有限,较小。
  3.静态存储区:由在编译时由编译器分配,由系统释放,其中存放的是全局变量、static变量和常量.
  4.区别:
  1)堆是由低地址向高地址扩展,栈是由高地址向低地址扩展。
  2)堆是不连续的空间,栈是连续的空间。
   3)在申请空间后,栈的分配要比堆的快。对于堆,先遍历存放空闲存储地址的链表、修改链表、再进行分配;对于栈,只要剩下的可用空间足够,就可分配到,如果不够,那么就会报告栈溢出。
  4)栈的生命期最短,到函数调用结束时;静态存储区的生命期最长,到程序结束时;堆中的生命期是到被我们手动释放时(如果整个过程中都不手动释放,那就到程序结束时)。
  5)举例:
   void fun()
  {
       char *ptr="abcdefg"; //指针变量ptr存在栈空间, 字符串常量"abcdefg”存在静态存储区
       char arr[]="abcdef";  //字符数组变量arr(其值"abcdef")存在栈空间
       char cha1='x';            //字符变量cha1存在栈空间
       char cha2='y';            //字符变量cha2存在栈空间
       char *p_char1 ;        //字符指针变量p_char1存在栈空间
       char *p_char2;        //字符指针变量p_char2存在栈空间
        p_char1 = arr;       //p_char1指向栈空间
        p_char2=(char*)new char[10]; //分配10字节的堆空间,p_char2指向这块堆空间
  }
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

打开支付宝扫一扫,最高立得1212元红包
搜索

图文热点

更多

社区学堂

更多

客服中心

QQ:187196467 服务时间:周一至周日 8:30-20:30

关注我们

关于我们
关于我们
友情链接
联系我们
帮助中心
网友中心
购买须知
支付方式
服务支持
资源下载
售后服务
定制流程
关注我们
官方微博
官方空间
官方微信
快速回复 返回顶部 返回列表