程序的运行场所是内存,栈和堆是进程的虚拟内存中的两部分区域。
当程序被执行时,程序代码,你所创建的变量、常量等都会被压入栈空间里,栈是程序代码的执行区域。栈的内存地址是连续的且被一一记录,所以说当你创建了一个变量(比如int var = 1),我们就可以通过var这个变量来访问变量的内容。在这里,var就存放在栈中,它的地址已经默认被编译器计算好了,调用过程也不需要你涉及到有关地址的操作。更直观的感受是数组,数组里的元素在栈里面是连续排放的,相邻两个元素的地址相差1。
而堆是不同于栈的另一部分区域,系统会给每个程序分配一部分栈空间让他们能够运行起来,问题就是栈空间必然存在不够用的问题,而堆不属于程序,堆是独立的,是公用的。只要你malloc(sizeof(SIZE_YOU_WANT)),就可以得到相应一部分的堆空间。

有栈,为什么用堆?
::栈里面的东西有生命周期,说俗点就是变量作用域,你在函数内部创建一个变量,函数调用结束这个变量就没了。而堆里面的东西独立于你的程序,malloc()之后,除非你free()掉,否则一直存在。

为什么用堆少?
::麻烦!

有什么要注意?
::堆里面申请的东西,是随机分配的,不像栈里面的地址都已经计算好了。所以申请了堆空间之后一定要创建一个指针保存你说申请到的堆空间的地址。不然就找不到你申请的空间了。
既然涉及到指针,请注意用之前检查一下指针空不空的问题。
堆空间的东西申请好,在用完之后一定要free()掉,以防止堆溢出。
说到安全性,还真是挺麻烦的。

堆(heap)与栈(stack)的区别(二)相关推荐

  1. bss段,data段、text段、堆heap和栈stack

    bss段,data段.text段.堆heap和栈stack bss段 data段 text段 堆(heap) 栈(stack) 例子 在C的学习中,你总避免不了对各类数据的存储区域学习归纳总结,简单的 ...

  2. JVM 内存初学 (堆(heap)、栈(stack)和方法区(method) )(转发)

    这两天看了一下深入浅出JVM这本书,推荐给高级的java程序员去看,对你了解JAVA的底层和运行机制有 比较大的帮助. 废话不想讲了.入主题: 先了解具体的概念: JAVA的JVM的内存可分为3个区: ...

  3. (深入理解计算机系统) bss段,data段、text段、堆(heap)和栈(stack)(C/C++存储类型总结)(内存管理)

    文章目录 bss段 data段 text段 堆(heap) 栈(stack) 一个程序本质上都是由 bss段.data段.text段三个组成的. 存储类型总结 bss段 bss段(bss segmen ...

  4. JVM 内存初学 (堆(heap)、栈(stack)和方法区(method) )

    JAVA的JVM的内存可分为3个区:堆(heap).栈(stack)和方法区(method) 堆区: 1.存储的全部是对象,每个对象都包含一个与之对应的class的信息.(class的目的是得到操作指 ...

  5. JVM 内存初学 (堆(heap)、栈(stack)和方法区(method) )(转载)

    想想面试的时候很多会问jvm这方面的问题虽然还是菜鸟不太能用到现在但是还是了解一下, 找资料的时候看见个大佬写的很好转载到这方便以后自己复习和给大佬做宣传 以下为大佬的博客原文: 这两天看了一下深入浅 ...

  6. Java堆(heap)、栈(stack)和队列的区别

    Java里面Stack有两种含义: 一:数据结构 Stack,即java.util.Stack import java.util.Stack; import java.util.Iterator; i ...

  7. BSS段 data段 text段 堆heap 和 栈stack

    BSS段:BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域.BSS是英文Block Started by Symbol的简称.BSS段属于静态内存分配.     ...

  8. 堆(heap)和栈(stack)有什么区别??

    简单的可以理解为: heap:是由malloc之类函数分配的空间所在地.地址是由低向高增长的. stack:是自动分配变量,以及函数调用的时候所使用的一些空间.地址是由高向低减少的. 预备知识-程序的 ...

  9. 堆(heap)和栈(stack)有什么区别

    简单的可以理解为: heap:是由malloc之类函数分配的空间所在地.地址是由低向高增长的. stack:是自动分配变量,以及函数调用的时候所使用的一些空间.地址是由高向低减少的. 程序的内存分配 ...

  10. 什么是堆什么是栈以及两者区别特点

    什么是堆什么是栈以及两者区别特点 一 英文名称 堆和栈是C/C++编程中经常遇到的两个基本概念.先看一下它们的英文表示: 堆――heap 栈――stack 二 从数据结构和系统两个层次理解 在具体的C ...

最新文章

  1. 用C#钩子写一个改键外挂
  2. Entity Framework 4.1 DbContext使用记之二——如何玩转本地实体? DbSet.Local属性的使用与实现...
  3. 【转载】企业级服务器设计与实现经验之插件系统基础篇
  4. 简历要避开哪些坑,资深面试官告诉你!
  5. P359 usestock2.cpp
  6. Migw用CMD编译C语言,NOTEPAD++用MinGW编译C,C++语言
  7. 不可思议的素数(下)
  8. ajax为什么返回html标签,AJAX与特定值后返回的HTML标签
  9. 王俊和尹玉新团队合作开发代谢组联合人工智能肺癌早期检测新方法
  10. 删除单词后缀(信息学奥赛一本通-T1141)
  11. mysql数据类型的验证_MYSQL数据类型详解
  12. HTTP/3 都来了,你却还在用 HTTP/1.1?
  13. js变量显示在html中_PythonDjango+JS+Ajax实现网页采集并动态显示PLC变量
  14. powerbi输入数据_与内部共享 Power BI 仪表板和报表
  15. mysql 命令之工作小结
  16. 宅霸java_宅霸游戏联机平台下载|宅霸游戏联机平台免费版下载 v4.5.0 官方版_小皮网...
  17. 家庭影院投影仪哪款值得买?2022年双11家庭影院4K投影仪首选当贝X3 Pro
  18. 安装kata container with cri-o
  19. mysql gt =_amp;lt;=amp;gt; operator in MySQL_MySQL
  20. SpringMVC配置文件中的各个组件

热门文章

  1. 2021年全国大学生智能汽车竞赛山东赛区比赛顺利进行
  2. 以赛促学,飞桨助力大学生智能车竞赛升级
  3. 2021-春季学习-智能车技术创新与实践-Lesson3
  4. loadrunner使用流程_LoadRunner关联函数
  5. win10商店打不开_PS打不开Raw格式?更新ACR新方式!【第05期 三分钟聊摄影】
  6. 子shell中使用相关的环境变量
  7. python绘制直方图根据不同分类_如何在python中绘制具有多个类别的直方图
  8. FPGA之道(56)状态的编码方式
  9. 【 FPGA 】组合逻辑中的竞争与险象问题(三)
  10. 记录使用Spartan-6进行流水灯控制的实验