堆栈:内存条里的某一块。

电脑中有6个地方可以保存数据。

<1>寄存器:保存最快。这东西在处理器内部。也就是CPU里的一小块地方给你放数据。既然是CPU,那么主要工作是计算,所以这块寄存器能放的东西十分有限,寄存器是由编译器分配。我们的程序里看不到的。

<2>栈:在RAM(随机访问存储器,就是内存)区域。通过操作堆栈指针可以直接操作这部分内存,例如,指针下移,创建新内存,上移,释放。这边所说的栈,严格说是栈,不是堆栈。堆栈是2个东西,创建程序时编译器需要知道从栈里分配多少存储空间,比较不自由。在 WINDOWS下,栈的大小是2M(也有的说是1M,总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将提示overflow。因此,能从栈获得的空间较小。

<3>堆:也在RAM中。区别于栈就是堆不需要知道创建对象时需要从堆里分配多大的存储空间,也不知道存储多长时间。常和new一个对象相关。堆的大小受限于计算机系统中有效的虚拟内存。

<4>静态存储:也在RAM中,但是位于固定位置。程序运行时,固定位于一段存储空间里。通常用关键字static。

<5>常数存储:常数值通常直接放在程序代码内部。永远都不会改变。通常用关键字readonly。

<6>非RAM存储。如程序外部的一个流式对象,该对象变成字节流,通常发给另一台机器。或者是一个固定对象,就是硬盘等上的固定对象。这些都可以变成RAM中的对象,如将一个图片转换成filestream。

看完上面,大概就知道了堆和栈其实就是内存里的两种数据结构。

栈只能在栈顶对数据进行插入和删除,先进后出,后进先出。堆得话顺序就随意了。

栈区stack由编译器自动分配释放,存放函数的参数值,局部变量的值,操作方式类似数据结构中的栈。

堆区(heap)— 由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。

这是一个前辈写的,非常详细

  //main.cpp

  int a = 0; 全局初始化区

  char *p1; 全局未初始化区

  main()

  {

  int b; 栈

  char s[] = "abc"; 栈

  char *p2; 栈

  char *p3 = "123456"; 123456\0在常量区,p3在栈上。

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

  p1 = (char *)malloc(10);

  p2 = (char *)malloc(20);

  }

堆和栈中的存储内容  

  栈: 在函数调用时,第一个进栈的是主函数中函数调用后的下一条指令(函数调用语句的下一条可执行语句)的地址,然后是函数的各个参数,在大多数的C编译器中,参数是由右往左入栈的,然后是函数中的局部变量。注意静态变量是不入栈的。

  当本次函数调用结束后,局部变量先出栈,然后是参数,最后栈顶指针指向最开始存的地址,也就是主函数中的下一条指令,程序由该点继续运行。

  堆:一般是在堆的头部用一个字节存放堆的大小。堆中的具体内容有程序员安排。

堆栈是一种存储部件,即数据的写入跟读出不需要提供地址,而是根据写入的顺序决定读出的顺序

值类型与引用类型

值类型吧,我感觉就是可以直接赋值的。而引用类型大部分是通过实例来进行操作的。

值类型和引用类型最根本的区别是:两者在内存中的分配位置不同,值类型(Value Type)的实例分配在线程的栈上,而引用类型(Reference Type)的实例总是从托管堆上分配内存。

值类型变量直接存储数据值,所以需要知道需要多大空间。

引用类型以new创建对象实例,并存储在堆中,并不需要知道确切需要多大空间。static class 是使用静态内存。不在堆栈中。

装箱和拆箱

将值类型转换为引用类型叫装箱。反之叫拆箱。引用类型就是个箱子,能把值装进去。

int i = 9;

obj j = i;  //装箱。

转载于:https://blog.51cto.com/feelmanc/1250534

堆和栈、值类型与引用类型、装箱与拆箱相关推荐

  1. Java 基本类型与自动装箱、拆箱

    基本数据类型 基本类型,或者叫内置类型,是 Jav 中不同于类(class)的特殊类型.它们是我们编程中使用最频繁的类型. Java 是一种强类型语言,第一次申明必须说明数据类型,第一次变量赋值称为变 ...

  2. Java中的基本类型与封装类型以及自动装箱、拆箱

    Java中的类型分为原始类型和对应的封装类型(装箱类型),基本类型包括byte字节型(一个字节).char字符型(两个字节).short短整型(两个字节).int整型(四个字节).long长整型(八个 ...

  3. .NET六大剑客:栈、堆、值类型、引用类型、装箱和拆箱

    .NET六大剑客:栈.堆.值类型.引用类型.装箱和拆箱 一."堆","栈"专区 这两个字我相信大家太熟悉了,甚至于米饭是什么?不知道..."堆&quo ...

  4. C#中定义装箱和拆箱详解

    1. C#装箱和拆箱是一个抽象的概念. 2. C#装箱是将值类型转换为引用类型:拆箱是将引用类型转换为值类型. 利用装箱和拆箱功能,可通过允许值类型的任何值与Object 类型的值相互转换,将值类型与 ...

  5. 理解C#中装箱和拆箱的概念

    前言 C#数据类型 什么是装箱.拆箱 产生装箱.拆箱的举例 总结 前言 C# 是一种通用.面向对象的编程语言,由微软(Microsoft)开发的,属于强类型语言,变量需先声明数据类型.然后给变量赋初值 ...

  6. [C#] C# 知识回顾 - 装箱与拆箱

    装箱与拆箱 目录 生活中的装箱与拆箱 C# 的装箱与拆箱 值类型和引用类型 装箱 拆箱 读者见解 生活中的装箱与拆箱    我们习惯了在网上购物,这次你想买本编程书 -- <C 语言从入门到放弃 ...

  7. 自动装箱和拆箱简单分析

    装箱:用于在垃圾回收堆中存储值类型.装箱是值类型到 object 类型或到此值类型所实现的任何接口类型的隐式转换. 拆箱:从 object 类型到值类型或从接口类型到实现该接口的值类型的显式转换. 装 ...

  8. 浅谈.NET中的类型和装箱、拆箱原理

    谈到装箱拆箱,大概的意思就是值类型和引用类型的相互转换呗---值类型到引用类型叫装箱,反之则叫拆箱.这当然没有问题,可是你只知道这么多,那么建议你花点时间看看楼主这篇文章 1. .NET中的类型 为了 ...

  9. C#基础:理解装箱与拆箱

    .NET大牛之路 • 王亮@精致码农 • 2021.08.27 前面我们讲到 .NET 平台支持的两大数据类型:值类型和引用类型.值类型比引用类型更高效,因为它没有指针引用,不用分配在托管堆中,也不用 ...

  10. [019] C#基础:理解装箱与拆箱

    .NET大牛之路 • 王亮@精致码农 • 2021.08.27 前面我们讲到 .NET 平台支持的两大数据类型:值类型和引用类型.值类型比引用类型更高效,因为它没有指针引用,不用分配在托管堆中,也不用 ...

最新文章

  1. Vim命令之查找和替换
  2. 使用Github Action发布函数到阿里云serverless平台
  3. electron 打包_Vue3+Electron整合方式
  4. TFS2015的CI集成
  5. qt4.8 mysql 驱动_Qt-4.8.5配置mysql驱动
  6. 581. Shortest Unsorted Continuous Subarray连续数组中的递增异常情况
  7. 桔子浏览器电脑版收藏夹位置在哪里 收藏夹位置路径
  8. requirejs 定义模块中含有prototype
  9. web.xml中webAppRootKey
  10. linux杀死网络,Linux下kill杀死进程详解
  11. JS判断浏览器类型与版本
  12. AI智能人脸识别很难?30行Python代码完美打造
  13. ASP.NET防止网页后退(禁止缓存)
  14. 2019,别进大厂了!
  15. 存储过程中进行循环处理数据
  16. java 企业级安全_《企业级Java安全性—构建安全的J2EE应用》 尹亚 【正版电子纸书阅读_PDF下载】- 书问...
  17. 赢在微创新_小米用互联网颠覆中国市场的内幕与方法
  18. 柴静——《穹顶之下》的雾霾调查读后感
  19. python-onvif库基本使用
  20. B站自定义视频播放速度

热门文章

  1. 微型计算机各部件之间通过总线传递各种信息,2015年9月计算机一级考试基础及MSOffice应用选择真题...
  2. matlab数字图像处理课程设计报告,数字图像处理课程设计实验报告.doc
  3. python修改文件名字数字_python实现多进程按序号批量修改文件名的方法示例
  4. python find函数 和index的区别_使用带有find和index的map时Python2和Python3之间的区别...
  5. spd不能修改服务器内存条的原因,修改内存SPD 解决蓝屏问题
  6. php上传中文图片,用PHP处理图片文件的上传
  7. linux apache php显示源码,linux 源码安装apache PHP 问题
  8. eclipse指定JDK版本启动,解决version XXX of the JVM is not suitable for this product.Version:XXX 问题
  9. 你的main函数规范吗?
  10. Python、C++ lambda 表达式