堆栈的理论知识

原创 2015年07月08日 14:16:25

堆和栈的理论知识
1.申请方式

栈:由系统自动分配和回收。
   例如,声明在函数中的一个局部变量int b,系统自动在栈中为b开辟空间。
堆:需要程序员自己申请,并指明大小,在C语言中用malloc等函数申请。
   例如:p1 = (char*)malloc(10*sizeof(char)) ;
    在C++中使用new运算符进行,但是注意p1,p2本身是在栈中的。

2.申请后系统的响应

   栈:只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出。
   堆:首先应该知道操作系统有一个记录空闲内存地址的链表,当系统收到程
将该节点从空间节点链表中删除,并将该节点的空间分配给程序。对于大多数
系统,会在这块内存空间中的首地址处记录本次分配的大小,
这样,代码中的delete语句才能正确地释放本内存空间,另外,由于找到的
对接点的大小不一定正好等于申请的大小,系统会自动将多余的那部分重新放
入空闲链表中。

3.申请大小的限制

    栈:在windows下,栈是向低地址扩展的数据结构,是一块连续的内存的
在Windows下,栈的大小是2MB(也有的说是1MB,总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间将提示overflow.因此,
能从栈获得的空间较小。
    堆:堆是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统
使用链表存储空闲内存地址的,自然是不连续的。而链表的遍历方向是由低地址
向高地址,堆的大小受限于计算机系统的有效虚拟内存。由此可见,堆获得的空
间比较灵活,也比较大。

4.申请效率的比较

    栈:由系统自动分配,速度较快,但程序员无法控制,当然也可以自行申请栈空间。
    堆:是有new分配的内存,一般速度比较慢,而且容易产生内存碎片,不过用起来最方便。

5.堆和栈中的存储内容

    栈:在函数调用中,入栈的是函数地址,函数的参数,局部变量等。参数是从右往左入栈的,注意静态变量是不入栈的
    堆:一般是堆的头部用一个字节存放堆的大小。
版权声明:本文为博主原创文章,未经博主允许不得转载。

博弈论(理论知识)

博弈论(理论知识)  博弈论:是二人或多人在平等的对局中各自利用对方的策略变换自己的对抗策 略,达到取胜目标的理论。博弈论是研究互动决策的理论。博弈可以分析自己与 对手的利弊关系,从而确立自己在...
  • e6894853
  • e6894853
  • 2012年10月22日 19:20
  • 898

Struts2基础知识(二)

本文主要包括以下内容 文件上传,多文件上传 自定义拦截器 文件上传 将头设置为enctype=”multipart/form-data” ...
  • whuhan2013
  • whuhan2013
  • 2016年04月26日 12:40
  • 894

CPO需要具备的知识结构

 1:CPO应该相当于 CPU,对海量数据进行有效选择、合理分配与消化后转化为适合公司知识。要求CIO有敏感度(知识、技术、市场)、甄别力、分析力、说服力2:战略上的高远,部门间的协作,具体工作的洞察...
  • ibmlife
  • ibmlife
  • 2009年11月12日 16:41
  • 351

webService的理论知识与见解

现在大多数写关于android网络webservice会用到一个接口ksoap2.0         ksoap2.0接口介绍         org.ksoap2.SoapEnvelope  ...
  • LGGisKing
  • LGGisKing
  • 2015年05月02日 22:55
  • 472

①网络爬虫基础知识

网络爬虫(网络数据采集程序)就像一只辛勤采蜜的小蜜蜂,它飞到花(目标网页)上,采集花粉(需要的信息),经过处理(数据清洗,存储)变成蜂蜜(可用的数据)。...
  • bear_n
  • bear_n
  • 2016年07月29日 11:21
  • 730

打印基础知识(2)

12.2  打 印 输 出 视频讲解:光盘/TM/Video/12/打印输出.exe打印在许多的应用程序中都使用,本节将介绍如何获得打印机设备上下文,以及打印文本信息和图像数据。12.2.1  获取打...
  • kailan818
  • kailan818
  • 2010年08月05日 11:31
  • 2655

JAVASE基础知识整理(一)

关于java极简历史介绍:1995年有sun公司开发,2009年被oracle公司收购 java又可以分为三类se,ee,me,这三类概念我理解的也不深刻,就简单介绍一下: javase:...
  • Bazingaea
  • Bazingaea
  • 2016年03月21日 23:04
  • 457

Dedecms网站建设的基础知识

1,  去官网下载安装包,解压后,只需要upload文件下的文件,把这些文件全部剪切到网站根目录下(比如根目录是dedecms); 2,  安装,在浏览器输入localhost/dedecms(以本地...
  • linhui03
  • linhui03
  • 2017年07月22日 23:58
  • 113

SpringMVC(第一天 基础知识)第一课时

主要内容: 什么是SpringMVC? SpringMVC的框架原理(掌握) 前端控制器,处理器映射器,处理器适配器,视图解析器 SpringMVC入门程序 非注解的处理器映射器,处理器设配器 ...
  • qq_33774822
  • qq_33774822
  • 2017年01月24日 13:09
  • 158

SQLite基础知识及简单应用

 SQLite SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低, 在嵌入式设备中,...
  • huwei2003
  • huwei2003
  • 2014年09月15日 15:17
  • 1295
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:堆栈的理论知识
举报原因:
原因补充:

(最多只允许输入30个字)