你弄清楚堆以及栈有哪些区分了么?

小微 科技你弄清楚堆以及栈有哪些区分了么?已关闭评论148字数 1125阅读模式
摘要堆和栈的区别一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操...

堆以及栈的区分

一、豫备知识—程序的内存分配文章源自微观生活(93wg.com)微观生活-https://93wg.com/3243.html

一个由c/C++编译的程序占用的内存分为下列几个部份文章源自微观生活(93wg.com)微观生活-https://93wg.com/3243.html

1、栈区(stack)— 由编译器自动分配释放 ,寄存函数的参数值,局部变量的值等。其操作方式相似于数据结构中的栈。文章源自微观生活(93wg.com)微观生活-https://93wg.com/3243.html

2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序收场时可能由OS回收 。注意它与数据结构中的堆是两码事,分配方式倒是相似于链表,呵呵。文章源自微观生活(93wg.com)微观生活-https://93wg.com/3243.html

3、全局区(静态区)(static)—,全局变量以及静态变量的存储是放在一块的,初始化的全局变量以及静态变量在一块区域, 未初始化的全局变量以及未初始化的静态变量在相邻的另外一块区域。 - 程序收场后有系统释放文章源自微观生活(93wg.com)微观生活-https://93wg.com/3243.html

4、文字常量区 —常量字符串就是放在这里的。 程序收场后由系统释放文章源自微观生活(93wg.com)微观生活-https://93wg.com/3243.html

5、程序代码区—寄存函数体的二进制代码。文章源自微观生活(93wg.com)微观生活-https://93wg.com/3243.html

二、例子程序文章源自微观生活(93wg.com)微观生活-https://93wg.com/3243.html

int a = 0; 全局初始化区文章源自微观生活(93wg.com)微观生活-https://93wg.com/3243.html

char *p1; 全局未初始化区文章源自微观生活(93wg.com)微观生活-https://93wg.com/3243.html

main

{

int b; 栈

char s[] = &34;; 栈

char *p2; 栈

char *p3 = &34;; 123456在常量区,p3在栈上。

static int c =0; 全局(静态)初始化区

p1 = malloc;

p2 = malloc;

分配得来得10以及20字节的区域就在堆区。

strcpy; 123456放在常量区,编译器可能会将它与p3所指向的&34;优化成一个处所。

}

二、堆以及栈的理论知识

2.1申请方式

stack:

由系统自动分配。 例如,声明在函数中一个局部变量 int b; 系统自动在栈中为b开拓空间

heap:

需要程序员自己申请,并指明大小,在c中malloc函数

如p1 = malloc;

在C++顶用new运算符

如p2 = malloc;

然而注意p1、p2自身是在栈中的。

 

2.2 申请后系统的响应

栈:只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异样提醒栈溢出。

堆:首先应当知道操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,

会遍历该链表,寻觅第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除了,并将该结点的空间分配给程序,此外,对于大多数系统,会在这块内存空间中的首地址处记录本次分配的大小,这样,代码中的delete语句才能正确的释放本内存空间。此外,因为找到的堆结点的大小不一定正好等于申请的大小,系统会自动的将过剩的那部份从新放入空闲链表中。

 

2.3申请大小的限制

栈:在Windows下,栈是向低地址扩大的数据结构,是一块连续的内存的区域。这句话的意思是栈顶的地址以及栈的最大容量是系统预先规定好的,在WINDOWS下,栈的大小是2M(也有的说是1M,总之是一个编译时就肯定的常数),

以上就是微观生活(93wg.com)关于“你弄清楚堆以及栈有哪些区分了么?”的详细内容,希望对大家有所帮助!

继续阅读
 
小微
  • 版权声明: 本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们(管理员邮箱:81118366@qq.com),情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!
  • 转载请务必保留本文链接:https://93wg.com/3243.html