程序在内存中的分布
时间:2022-07-23
本文章向大家介绍程序在内存中的分布,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
本篇原创作者:Rj45
大纲
对于x86架构下的Linux程序,在被载入内存中会展开成如下情况:
1、对于x86 架构的系统来说,器虚拟空间为4GB. 2、高位的1GB为内核空间。3、低位的3GB由Text segment(ELF)、Data segment、Bss segment、Heap、Memory mapping Segment、stack。4、Memory mapping Segment存放Linux的动态链接库 5、对于stack来说,其最大值为8MB。
.bss
1、作用:bss段用来存放没有被初始化和已经被初始化为0的全局变量
2、例子
3、编译链接
sudo gcc -g bss.c -o bss
4、查看
objdump -h bss | grep bss
.data
1、作用:data段用来存放已经被初始化为非0的全局变量
2、例子
3、编译链接
gcc -g data.c -o data
4、查看
objdump -h data | grep \.data
.rodata
作用:rodata段用来存放常量数据、被编译器自动存放来的字符串和加 const
关键字的常量数据。
.text
作用:text段用来存放代码和部分整数常量,该段是可执行的。
stack
作用:1、stack存放函数的临时变量、局部变量、函数参数和返回值 2、由编译器自动分配和释放。
heap
1、作用:heap用来动态分配内存,由程序员控制,交由程序自身决定开辟和释放。malloc&free calloc&realloc 2、例子 malloc&free
3、编译链接
sudo gcc heap.c -o heap
4、查看
5、其他方式
1)calloc()函数
void *calloc(size_t number,size_t size);
用法1
int *p = (int *)calloc(1024,sizeof(int));
用法2
int *p = (int *)malloc(1024*sizeof(int));
memset(p.0,1024*sizeof(int));
number表示要分配元素的个数、size表示每个元素的大小、分配的内存空间是numbersize、返回值为void类型的指针,指向分配号的内存首地址。2)realloc()函数 realloc()函数用来重新分配正在使用的一块内存大小。
void *realloc(void *ptr,size_t size);
int *p = (int *)malloc(1024);
p = (int *)realloc(512);// 重新分配为 512字节大小内存
p = (int *)realloc(2048);// 重新分配为2048字节大小内存
参考
https://www.cnblogs.com/hythink/p/5422602.html
- Windows Server 2008 R2 网络负载平衡 (NLB)资料汇总
- 0.[Andriod]之从零安装配置Android Studio并编写第一个Android App
- WordPress 后台编辑文章页面添加自定义提示文字
- 使用json 和jQuery制作级联dropdownlist
- 在64位Windows 7/2008操作系统上部署32位的Web应用程序错误
- 云计算浪潮
- 2.[Andriod]Andriod Studio结合Visual Studio Emulator for Android调试Android App
- Windows Server AppFabric Caching
- zepto 基础知识(2)
- DeepMind回顾2017年:除了战胜柯洁还有哪些大事
- [认证授权] 1.OAuth2授权
- 机器学习(四)——梯度下降算法解释以及求解
- 在Windows上运行单节点的Cassandra
- Mono技术规格
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Python logging日志模块 配置文件方式
- PHP XML Expat解析器知识点总结
- PHP实现唤起微信支付功能
- PHP封装的mysqli数据库操作类示例
- PHP-FPM 的管理和配置详解
- PHP基于curl实现模拟微信浏览器打开微信链接的方法示例
- 实例讲解PHP表单验证功能
- python如何从键盘获取输入实例
- 使用Keras实现Tensor的相乘和相加代码
- php无限级分类实现评论及回复功能
- php获取手机端的号码以及ip地址实例代码
- PHP数组遍历的几种常见方式总结
- 详解php协程知识点
- php curl简单采集图片生成base64编码(并附curl函数参数说明)
- PHP通过get方法获得form表单数据方法总结