【面试】测试/测开(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)堆
    ① 通常可以被看作一棵树的数组对象
    ② 堆中某个结点的值总是不大于或不小于其父结点的值;
    ③ 堆总是一棵完全二叉树。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024年回炉计划之排序算法(一)

算法是计算机科学和信息技术中的重要领域,涉及到问题求解和数据处理的方法。要学习算法,你可能需要掌握以下一些基本知识: 基本数据结构: 了解和熟练使用各种数据结构,如数组、链表、栈、队列、树和图等。数据结构是算…

新能源汽车智慧充电桩方案:基于视频监控的可视化智能监管平台

一、方案概述 TSINGSEE青犀&触角云新能源汽车智慧充电桩方案围绕互联网、物联网、车联网、人工智能、视频技术、大数据、4G/5G等技术,结合云计算、移动支付等,实现充电停车一体化、充电桩与站点管理等功能,达到充电设备与站点的有效监控…

【汇编】实验12 编写0号中断的处理程序

记录一下代码 assume cs:code code segment start:mov ax,csmov ds,axmov si,offset do0mov ax,0mov es,axmov di,200hmov cx,offset do0end-offset do0cldrep movsb ;将ds:si的字节单元byte送入es:di,也就是将从do0处往下的指令复制到0:200h中。mov word ptr es:[…

阿赵UE学习笔记——11、地形系统

阿赵UE学习笔记目录 大家好,我是阿赵。   继续学习虚幻引擎的用法,这次来学习一下虚幻引擎的地形系统的用法。 一、创建地形 在选项模式里面,选择地形: 进入到地形界面之后,需要先创建一个地形: 留意看…

Springboot+vue的智能家居系统(有报告),Javaee项目,springboot vue前后端分离项目

演示视频: Springbootvue的智能家居系统(有报告),Javaee项目,springboot vue前后端分离项目 项目介绍: 本文设计了一个基于Springbootvue的前后端分离的智能家居系统,采用M(model&a…

【Android】为什么在子线程中更新UI不会抛出异常

转载请注明来源:https://blog.csdn.net/devnn/article/details/135638486 前言 众所周知,Android App在子线程中是不允许更新UI的,否则会抛出异常: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the origin…

芯片新闻-Global Semiconductor Sales Increase 5.3% Year-to-Year in November

11 月标志着一年多以来市场同比增长的第一个月;全球芯片销量环比增长2.9% 华盛顿——一月。 2024 年 12 月 9 日——半导体行业协会 (SIA) 今天宣布,2023 年 11 月全球半导体行业销售额总计 480 亿美元,比 2022 年 11 月的 456 亿美元总额增…

rust获取本地外网ip地址的方法

大家好,我是get_local_info作者带剑书生,这里用一篇文章讲解get_local_info的使用。 get_local_info是什么? get_local_info是一个获取linux系统信息的rust三方库,并提供一些常用功能,目前版本0.2.4。详细介绍地址&a…

大屏数据可视化的设计流程及原则

随着数字经济的快速发展和信息化在各行业各领域的深入推进,可视化大屏在各行各业得到越来越广泛的应用。可视化大屏不再只是电影里奇幻的画面,而是被实实在在地应用在政府、商业、金融、制造、交通、城市等各个行业的业务场景中,切切实实地实…

「alias」Linux 给命令起别名,自定义bash命令

0. 背景 Arch 系统没有 ll命令,在其他发行版用惯了一时间没有真不习惯,来配置一下吧! 1. 全局配置 我希望 ll 命令可以被所有人使用,所以应该配置在全局的bash配置文件中,一般这个全局bash配置文件在: /etc/bash.bashrc 切好管理员权限后,命令如下 echo “alias ll‘ls -l -…

React的合成事件

合成事件:通过事件委托,利用事件传播机制,当事件传播到document时,再进行分发到对应的组件,从而触发对应所绑定的事件,然后事件开始在组件树DOM中走捕获冒泡流程。 原生事件 —— > React事件 —— >…

TMDB电影数据分析(下)

TMDB电影数据分析(下) 本文对源自Kaggle TMDB电影数据集进行分析影响电影票房的因素,数据分析流程包含数据集概分析、数据清洗、数据统计以及分析影响电影票房的因素。影响票房因素可能是电影预算、电影类型、电影时长、受欢迎程度、电影评分…

十二、Qt 操作PDF文件(2)

一、在《十、Qt 操作PDF文件-CSDN博客》中我们用Poppler类库打开了PDF文件,并显示到窗体上,但只能显示一页,功能还没完善,在本章节中,加入了: 通过选择框选择PDF文件并打开,默认打开第一页。通…

【机器学习300问】11、多元线性回归模型和一元线性回归有什么不同?

在之前的文章中,我们已经学习了一元线性回归模型,其中最关键的参数是w和b。机器学习的目的就是去得到合适w和b后能准确预测未知数据。但现实世界是复杂的,一个事情的发生绝大多数时候不会是一个原因导致。 因此多元线性回归模型区别与一元线性…

虚幻UE 特效-Niagara特效实战-火焰、烛火

在上一篇笔记中:虚幻UE 特效-Niagara特效实战-烟雾、喷泉 我们进行了烟雾和喷泉的实战,而今天这篇笔记 我们在不使用模板的前提下对火焰和烛火特效进行实战 文章目录 一、火焰1、创建火焰的Niagara系统2、分析火焰是怎样的特征3、优化设置 二、烛火1、创…

cefsharp120.2.50(cef120.2.5,Chromium6167)升级测试及其他H264版本

一、版本变化 1.1 本次版本 本版本暂不支持H264,请参考其他版本,见文章底部。 有关cefsharp更新说明,这几天github打不开就不截图了。较上一版本没有大的变更。 1.2 H264版本 推荐版本:V100,V109,V111,V119版本 二、升级过程及注意事项 三、相关版本(H264版本) 私信…

RT-Thread Studio学习(十四)ADC

RT-Thread Studio学习(十四)ADC 一、简介二、新建RT-Thread项目并使用外部时钟三、启用ADC四、测试 一、简介 本文将基于STM32F407VET芯片介绍如何在RT-Thread Studio开发环境下使用ADC设备。硬件及开发环境如下: OS WIN10STM32F407VET6STM…

2.常见的点云数据滤波的方法总结(C++)

常见的点云数据处理有体素网格滤波、半径滤波、直通滤波、双边滤波器,统计滤波器,卷积滤波,条件滤波,高斯滤波等等。每种方法的原理和代码如下: 1.体素网格滤波 体素网格滤波是对密度大的三维的点在保持原来形状的条件…

Go后端开发 -- 反射reflect

Go后端开发 – 反射reflect && 结构体标签 文章目录 Go后端开发 -- 反射reflect && 结构体标签一、反射reflect1.编程语言中反射的概念2.interface 和反射3.变量内置的pair结构4.reflect的基本功能TypeOf和ValueOf5.从relfect.Value中获取接口interface的信息6…

SSL证书自动化管理有什么好处?如何实现SSL证书自动化?

SSL证书是用于加密网站与用户之间传输数据的关键元素,在维护网络安全方面,管理SSL证书与部署SSL证书一样重要。定期更新、监测和更换SSL证书,可以确保网站的安全性和合规性。而自动化管理可以为此节省时间,并避免人为错误和不必要…