当前位置: 首页 > news >正文

基础才是重中之重~内存里的堆和栈

内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区

栈  先进后出(FILO—First-In/Last-Out)

就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。(C#里,值类型被存储在栈上)

堆  先进先出(FIFO—first in first out)

就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。(C#里,引用类型被存储在堆上)

自由存储区

就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。

全局/静态存储区

全局变量和静态变量被分配到同一块内存中,在以前的C语言中,全局变量又分为初始化的和未初始化的,在C++里面没有这个区分了,他们共同占用同一块内存区。

常量存储区

这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改(当然,你要通过非正当手段也可以修改,而且方法很多)

例子-栈

int a=3;
int b=3;

编译器先处理int a= 3;首先它会在栈中创建一个变量为a的内存空间,然后查找有没有字面值为3的地址,没找到,就开辟一个存放3这个字面值的地址,然后将a指向3的地址。接着处理int b= 3;在创建完b的引用变量后,由于在栈中已经有3这个字面值,便将b直接指向3的地址。这样,就出现了a与b同时均指向3的情况。

例子-堆

public class MyInt
{ publicint MyValue; }
public MyInt AddFive(int pValue) { MyInt result = new MyInt(); result.MyValue = pValue + 5; return result; }

方法及方法的参数被放置到栈上,接下来,控制被传递到堆栈中AddFive()的指令上。

感谢咱们阅读!

相关文章:

  • 【芯片救德国】博世10亿欧元建世界最先进芯片工厂,2021年正式投产
  • spring常用的注解
  • 《人件》阅读笔记三
  • SpringBoot拦截器
  • 静态路由的配置
  • HTML 知识弥补
  • 国内互联网可用时间服务器地址(NTP时间服务器地址)
  • 关于隐私数据获取统一说明
  • C++ 中的 unique 函数
  • tornado 04 模板
  • JavaWeb XSS攻击防御
  • 廖雪峰Git教程总结
  • TCP基础知识
  • linux DNS
  • 《Linux学习并不难》Linux网络命令(2):ifconfig命令显示和配置网络接口
  • Computed property XXX was assigned to but it has no setter
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • Intervention/image 图片处理扩展包的安装和使用
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • vue-cli在webpack的配置文件探究
  • webpack4 一点通
  • 包装类对象
  • 从零开始的无人驾驶 1
  • 汉诺塔算法
  • 后端_ThinkPHP5
  • 简单易用的leetcode开发测试工具(npm)
  • 跨域
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 数据科学 第 3 章 11 字符串处理
  • 数组的操作
  • 做一名精致的JavaScripter 01:JavaScript简介
  • 从如何停掉 Promise 链说起
  • 数据库巡检项
  • #1014 : Trie树
  • #Java第九次作业--输入输出流和文件操作
  • #Linux(帮助手册)
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (多级缓存)缓存同步
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (转)http-server应用
  • (转)JAVA中的堆栈
  • (转)jdk与jre的区别
  • (转)大型网站架构演变和知识体系
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • ***原理与防范
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .NET Framework 服务实现监控可观测性最佳实践