代码段:通常是指用来存放程序执行代码的一块内存区域,这部分区域的大小在程序运行之前就已经确定,并且内存区域通常属于只读,在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等.

数据段:通常用来存放已经初始化的全局变量和局部静态变量.

bss段:通常是指用来存放程序中未初始化的全局变量的一块内存区域.bss是英文block started by symbol 的简称,这个区域中的数据在程序运行前将被自动初始化为数字0.

堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩展或缩小.当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上;当利用frre等函数释放内存时,被释放的内存从堆中被剔除.

栈是函数执行的内存区域,通常和堆共享同一片区域.

区别

申请方式:

-堆由程序员手动申请

-栈由系统自动分配

释放方式:

-堆由程序员手动释放

-栈由系统自动释放

生存周期:

-堆的生存周期由动态申请到程序员主动释放为止,不同函数之间均可自由访问

-栈的生存周期由函数调用开始到函数返回时结束,函数之间的局部变量不能互相访问

发展方向:

-堆和其他区段一样,都是从低地址向高地址发展.

-栈则相仿,是由高地址向低地址发展.

c语言的内存布局规律相关推荐

  1. java 线程 内存分配内存_漫谈JAVA语言的内存分配

    在说JAVA语言的内存分配之前,我们先聊聊OS的Memory Management,这是学习操作系统课程的一个重要内容.从这里开始理解内存分配有利于理解的更深入. 我们知道物理内存是由page 和se ...

  2. 【C 语言】内存管理 ( 动态内存分配 | 栈 | 堆 | 静态存储区 | 内存布局 | 野指针 )

    相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...

  3. Linux下C语言程序的内存布局(内存模型)

    在<虚拟地址空间以及编译模式>一节中讲到,虚拟地址空间在32位环境下的大小为 4GB,在64位环境下的大小为 256TB,那么,一个C语言程序的内存在整个地址空间中是如何分布的呢?数据在哪 ...

  4. 【C语言进阶深度学习记录】三十六 程序与进程的区别(程序的内存布局)

    上一篇文章学了堆,栈以及静态存储区.它们实际上都是针对进程来说的.那么程序与进程有什么区别呢? 本文不细讲程序与进程. 1 程序与进程 1.1 什么是程序 写完的.c文件是源文件.也叫源代码. 将源代 ...

  5. 7. 重磅硬核 | 一文聊透对象在JVM中的内存布局,以及内存对齐和压缩指针的原理及应用

    重磅硬核 | 一文聊透对象在JVM中的内存布局,以及内存对齐和压缩指针的原理及应用 大家好,我是bin,又到了每周我们见面的时刻了,我的公众号在1月10号那天发布了第一篇文章?<从内核角度看IO ...

  6. 一文聊透对象在JVM中的内存布局,以及内存对齐和压缩指针的原理及应用

    大家好,我是bin,又到了每周我们见面的时刻了,我在1月10号那天发布了第一篇文章<从内核角度看IO模型的演变>,在这篇文章中我们通过图解的方式以一个C10k的问题为主线,从内核角度详细阐 ...

  7. Linux 进程内存布局(一)

    Linux 进程内存布局 内存管理是操作系统的核心分部,对于程序员和系统管理员来说都非常重要. 这篇文章中我将以介绍一个运行在x86架构的32位Linux 操作系统上进程为例,介绍进程在执行的时候的内 ...

  8. 【C++】C++对象模型:对象内存布局详解(C#实例)

    C++对象模型:对象内存布局详解 0.前言 C++对象的内存布局.虚表指针.虚基类指针解的探讨,参考. 1.何为C++对象模型? 引用<深度探索C++对象模型>这本书中的话: 有两个概念可 ...

  9. 理解Java对象:要从内存布局及底层机制说起,话说....

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 前言 大家好,又见面了,今天是JVM专题的第二篇文章,在上 ...

最新文章

  1. JavaBean的保存范围与javaBean的删除
  2. golang中的互斥锁
  3. python-基础知识
  4. maven POM总结
  5. java todo error_Java全局异常处理(TODO)
  6. textview文字链接无法点击
  7. html检查元素是否溢出方法,JS判断指定dom元素是否在屏幕内的方法实例
  8. java random.nextbyte_java.util.Random.next()方法实例
  9. 机器视觉九大应用场景
  10. 域名转移:以腾讯云转至阿里云为例
  11. (译)BPF技巧和窍门:bpf_trace_printk() 和 bpf_printk() 指南
  12. RuntimeError: mat1 and mat2 shapes cannot be multiplied (32x7 and 784x1024) 报错解决
  13. A003-182-2268-黄清梅
  14. Intel汇编-无符号整数除法
  15. 动物识别系统代码python_动物识别 python 人工智能实验
  16. java毕业设计软件工程专业教辅平台课程子系统mybatis+源码+调试部署+系统+数据库+lw
  17. 如何选择socks5免费代理地址呢?
  18. 抖音之xl xa xg xk 四神签名参数
  19. 腾讯视频 for Mac缓存的视频在哪?找不到腾讯视频缓存文件怎么办
  20. 记一次Spring cloud和Spring boot版本不一致导致项目启动失败的解决办法!!

热门文章

  1. Ubuntu解决键盘错乱与图形化切换
  2. pg 快速造1000w测试数据
  3. 关于redis的BussinessName取法
  4. mac苹果电脑如何改变PDF大小?mac上pdt文件太大如何变小?mac上pd文件大小怎么改小?苹果电脑打印pdt何调大小?Mac电脑如何把PDF文件缩小?
  5. python,list元素倒置
  6. 【C语言编程】简单密码
  7. 【P1516】青蛙的约会
  8. java俄罗斯方块英文书籍_Java版俄罗斯方块
  9. Synchronized详细介绍之锁升级过程
  10. iOS开发关于“发送原图”功能问题的记录