【面试】测试/测开(ING3)

190. 栈和堆在内存管理上的区别


  1. 1) 栈是由系统自动分配和回收的内存。
    2)栈的存储地址是由高地址向低地址扩展的。
    3)栈是一个先进后出的结构。
    4)栈的空间大小是一个在编译时确定常数,即栈的大小是有限制的,当申请的空间大小超限时会提示overflow。
    5) 栈:就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。
    6) 栈可以视为一个临时存储空间,这种临时存放数据的特性,使得它经常用来存储局部变量,函数参数,上下文环境等。
    7)栈的效率比较高:计算机分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,这就决定了栈的效率比较高。
    栈


  2. 1)堆区是向上生长的用于分配程序员申请的空间。
    2)在操作系统中有记录空闲内存地址的链表(也有可能是位图等其他方式),当系统受到程序的申请时就会遍历该链表寻找第一个大于该申请空间堆(假设是FIFS,当然也有可能是其他的如段进程优先等),然后将该节点从链表中删除,并将该节点的空间分配给程序;另外,对于大多数系统,会在这块内存空间中的首地址处记录本次分配的大小,这样,代码中的delete语句才能正确的释放本内存空间。若找到的堆节点的空间大小大于所申请的空间,则系统会自动将多余的空间重新放入空闲链表中,也就是说堆在进行空间分配后还要做一些后续工作就会引入效率问题。
    3)栈是系统自动申请和释放的,而堆更加强调的是手动控制,需要手动申请和释放空间。
    4)堆可分配的空间更大,但是也有较大的开销
    5)堆是在程序执行的过程中动态分配的,它最大的特性就是动态性。堆就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。
    堆

  3. 其他存储区
    1) 静态存储区
    静态变量和全局变量都存储于静态存储区。

2)常量存储区
这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改。
常量字符串都存放在静态存储区,返回的是常量字符串的首地址。

  1. 堆和栈的比较
    比较
  2. 数据结构中的堆和栈
    1)栈
    ① 栈是先进后出的数据结构
    ② 是一种运算受限的线性表
    ③ 只能够在栈顶进行插入和删除元素(栈顶即高地址位置)
    2)堆
    ① 通常可以被看作一棵树的数组对象
    ② 堆中某个结点的值总是不大于或不小于其父结点的值;
    ③ 堆总是一棵完全二叉树。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/411489.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一个 web版linux、数据库、redis、mongo统一管理操作平台

mayfly-go:一个 web版linux、数据库、redis、mongo统一管理操作平台 功能介绍 linux: ssh终端(终端操作记录回放),文件查看(可根据常见后缀名高亮显示关键词等)、修改、上传、下载、删除等,脚本管理执行&…

C语言——小细节和小知识9

一、大小端字节序 1、介绍 在计算机系统中,大小端(Endianness)是指多字节数据的存储和读取顺序。它是数据在内存中如何排列的问题,特别是与字节顺序相关。C语言中的数据存储大小端字节序指的是在内存中存储的多字节数据类型&…

Unity之物理系统

专栏的上一篇角色控制器控制角色移动跳崖,这一篇来说说Unity的物理系统。 本篇小编还要带大家做一个碰撞检测效果实例,先放效果图:流星撞击地面产生爆炸效果 一、Rigidbody 我们给胶囊添加了 Rigidbody 组件它才有的重力,我们来…

QT上位机开发(进度条操作)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 进度条是一个比较常见的控件。如果某个操作需要很长的时间才能完成,那么这个时候最好有一个进度条提示,这样比较容易平复一…

网络端口映射和端口转发的区别和联系

目 录 一、端口映射技术 1.1 原理 1.2 应用场景 1、远程访问 2、游戏主机 3、文件共享 4、监控视频共享 二、端口转发技术 2.1 原理 2.2 应用场景 1、网络负载均衡 2、网络安全 3、网络代理 三、端口映射和转发的实现方法 3.1 路由器配置 3.2 网络防火墙 …

Jupyter Notebook五分钟基础速通

1 作用 常用于数据分析 2 安装 2.1 Anaconda 通过直接安装Anaconda,会自动安装Jupyter Notebook 2.2 命令行安装 ① 3.x版本 pip3 install --upgrade pip pip3 install jupyter ② 2.x版本 pip install --upgrade pip pip install jupyter 3 启动 cmd窗口下…

主动自动智能、全天在线值守!浪潮信息InService托维服务平台V2.0焕新升级

日前,浪潮信息发布了InService托维服务平台2.0版本,新增了自动化微码版本推荐、硬盘故障智能预测、服务报告自助订阅等功能模块。该平台对接入设备可7*24小时在线监测,量化评估设备状态,提前预警故障,实现主动式服务。…

Android Matrix绘制PaintDrawable设置BitmapShader,手指触点为圆心scale放大原图,Kotlin

Android Matrix绘制PaintDrawable设置BitmapShader,手指触点为圆心scale放大原图,Kotlin 在 Android基于Matrix绘制PaintDrawable设置BitmapShader,以手指触点为中心显示原图的圆切图,Kotlin(4)-CSDN博客 的…

【计算机网络】【新加坡南洋理工大学】【Computer Control Network】【广域网和局域网简介】【中英对照(自译)】

一、说明 仅供学习使用。 二、广域网(WAN)和局域网(LAN)简介

【文档数据库】ES和MongoDB的对比

目录 1.由文档存储牵出的问题 2.什么是MongoDB? 3.ES和MongoDB的对比 1.由文档存储牵出的问题 本文或者说关于mongodb的这个系列文章的源头: 前面我们聊过了分布式链路追踪系统,在基于日志实现的分布式链路追踪的方式seluthzipkin中为了…

企业如何在新媒体领域做好风险管理?

为了企业能更加放心地进行新媒体营销活动,矩阵通向企业提供一套完整的新媒体风险管控机制,支持企业新媒体矩阵账号体检、敏感内容违规检测、实时监测多平台负面用户信息。 矩阵通是新榜旗下的新媒体数字化内容资产管理SaaS,可以帮助企业解决跨…

Spring Boot - 利用Resilience4j-RateLimiter进行流量控制和服务降级

文章目录 Resilience4j概述Resilience4j官方地址Resilience4j-RateLimiter微服务演示Payment processorPOM配置文件ServiceController Payment servicePOMModelServiceRestConfigController配置验证 探究 Rate Limiting请求三次 ,观察等待15秒连续访问6次 Resilienc…