进程内存中堆和栈的区别

1、概述在整理数据结构时,整理过栈、队列和堆,但是在学习进程分布的时候又碰到了 栈和堆,初学时很容易把这几个概念给弄混,今天有空就给整理一下。2、程序在内存中的分布程序在内存中的分布如下图所示:1、栈(stack):由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈,先进后出的原则。2、堆(heap):由程序员手动分配释放,若不释放,在程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式类似于链表(内存池)。3、未初始化数据:未初始化的全局变量和
摘要由CSDN通过智能技术生成

1、概述

在整理数据结构时,整理过队列,但是在学习进程分布的时候又碰到了 栈和堆,初学时很容易把这几个概念给弄混,今天有空就给整理一下。

2、程序在内存中的分布

程序在内存中的分布如下图所示:在这里插入图片描述
1、栈(stack):由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈,先进后出的原则。
2、堆(heap):由程序员手动分配释放,若不释放,在程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式类似于链表(内存池)。
3、未初始化数据:未初始化的全局变量和未初始化的静态变量。
4、已初始化数据:初始

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据结构中的有以下区别: 1. 定义:是一种基于树结构的数据结构,用于动态分配内存是一种受限制的线性表,只允许在表的一端进行插入和删除操作。 2. 内存分配:内存分配由程序员手动控制,通过malloc、new等函数分配内存,并且需要手动释放内存,容易产生内存泄漏。内存分配由操作系统自动完成,局部变量的分配和释放都是自动的。 3. 空间大小:每个进程所拥有的大小远远大于大小。的大小可以达到虚拟内存的大小,而只有有限的空间。在64位的Windows系统中,默认大小是1MB,而在64位的Linux系统中,默认大小是10MB。 4. 生长方向:的生长方向是向上的,内存地址由低到高增加。的生长方向是向下的,内存地址由高到低减小。 5. 分配方式:的分配是动态的,没有静态分配的有两种分配方式,静态分配和动态分配。静态分配由操作系统完成,比如局部变量的分配。动态分配由alloca()函数分配,但是的动态分配是由操作系统进行释放,不需要手动实现。 6. 分配效率:由操作系统自动分配,对的操作在硬件层面有专门的支持,拥有专门的寄存器存储的地址和执行相关指令,因此的分配和释放效率较高。是由程序员手动分配和释放的,实现机制较为复杂,频繁的内存申请容易产生内存碎片,因此的效率比低得多。 7. 存放内容:用于动态存放数据对象,如动态数组、对象的实例等。存放的内容主要是函数返回地址、函数参数、局部变量和寄存器内的值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值