c语言的内存布局规律
代码段:通常是指用来存放程序执行代码的一块内存区域,这部分区域的大小在程序运行之前就已经确定,并且内存区域通常属于只读,在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等.
数据段:通常用来存放已经初始化的全局变量和局部静态变量.
bss段:通常是指用来存放程序中未初始化的全局变量的一块内存区域.bss是英文block started by symbol 的简称,这个区域中的数据在程序运行前将被自动初始化为数字0.
堆
堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩展或缩小.当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上;当利用frre等函数释放内存时,被释放的内存从堆中被剔除.
栈
栈是函数执行的内存区域,通常和堆共享同一片区域.
区别
申请方式:
-堆由程序员手动申请
-栈由系统自动分配
释放方式:
-堆由程序员手动释放
-栈由系统自动释放
生存周期:
-堆的生存周期由动态申请到程序员主动释放为止,不同函数之间均可自由访问
-栈的生存周期由函数调用开始到函数返回时结束,函数之间的局部变量不能互相访问
发展方向:
-堆和其他区段一样,都是从低地址向高地址发展.
-栈则相仿,是由高地址向低地址发展.
c语言的内存布局规律相关推荐
- java 线程 内存分配内存_漫谈JAVA语言的内存分配
在说JAVA语言的内存分配之前,我们先聊聊OS的Memory Management,这是学习操作系统课程的一个重要内容.从这里开始理解内存分配有利于理解的更深入. 我们知道物理内存是由page 和se ...
- 【C 语言】内存管理 ( 动态内存分配 | 栈 | 堆 | 静态存储区 | 内存布局 | 野指针 )
相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...
- Linux下C语言程序的内存布局(内存模型)
在<虚拟地址空间以及编译模式>一节中讲到,虚拟地址空间在32位环境下的大小为 4GB,在64位环境下的大小为 256TB,那么,一个C语言程序的内存在整个地址空间中是如何分布的呢?数据在哪 ...
- 【C语言进阶深度学习记录】三十六 程序与进程的区别(程序的内存布局)
上一篇文章学了堆,栈以及静态存储区.它们实际上都是针对进程来说的.那么程序与进程有什么区别呢? 本文不细讲程序与进程. 1 程序与进程 1.1 什么是程序 写完的.c文件是源文件.也叫源代码. 将源代 ...
- 7. 重磅硬核 | 一文聊透对象在JVM中的内存布局,以及内存对齐和压缩指针的原理及应用
重磅硬核 | 一文聊透对象在JVM中的内存布局,以及内存对齐和压缩指针的原理及应用 大家好,我是bin,又到了每周我们见面的时刻了,我的公众号在1月10号那天发布了第一篇文章?<从内核角度看IO ...
- 一文聊透对象在JVM中的内存布局,以及内存对齐和压缩指针的原理及应用
大家好,我是bin,又到了每周我们见面的时刻了,我在1月10号那天发布了第一篇文章<从内核角度看IO模型的演变>,在这篇文章中我们通过图解的方式以一个C10k的问题为主线,从内核角度详细阐 ...
- Linux 进程内存布局(一)
Linux 进程内存布局 内存管理是操作系统的核心分部,对于程序员和系统管理员来说都非常重要. 这篇文章中我将以介绍一个运行在x86架构的32位Linux 操作系统上进程为例,介绍进程在执行的时候的内 ...
- 【C++】C++对象模型:对象内存布局详解(C#实例)
C++对象模型:对象内存布局详解 0.前言 C++对象的内存布局.虚表指针.虚基类指针解的探讨,参考. 1.何为C++对象模型? 引用<深度探索C++对象模型>这本书中的话: 有两个概念可 ...
- 理解Java对象:要从内存布局及底层机制说起,话说....
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 前言 大家好,又见面了,今天是JVM专题的第二篇文章,在上 ...
最新文章
- JavaBean的保存范围与javaBean的删除
- golang中的互斥锁
- python-基础知识
- maven POM总结
- java todo error_Java全局异常处理(TODO)
- textview文字链接无法点击
- html检查元素是否溢出方法,JS判断指定dom元素是否在屏幕内的方法实例
- java random.nextbyte_java.util.Random.next()方法实例
- 机器视觉九大应用场景
- 域名转移:以腾讯云转至阿里云为例
- (译)BPF技巧和窍门:bpf_trace_printk() 和 bpf_printk() 指南
- RuntimeError: mat1 and mat2 shapes cannot be multiplied (32x7 and 784x1024) 报错解决
- A003-182-2268-黄清梅
- Intel汇编-无符号整数除法
- 动物识别系统代码python_动物识别 python 人工智能实验
- java毕业设计软件工程专业教辅平台课程子系统mybatis+源码+调试部署+系统+数据库+lw
- 如何选择socks5免费代理地址呢?
- 抖音之xl xa xg xk 四神签名参数
- 腾讯视频 for Mac缓存的视频在哪?找不到腾讯视频缓存文件怎么办
- 记一次Spring cloud和Spring boot版本不一致导致项目启动失败的解决办法!!