虚拟地址空间划分

记住:任何编程语言编译之后产生=汇编指令+数据
每一个进程的用户空间是私有的,内核空间是共享的(管道通信的原理)

X86 32为linux环境下,虚拟地址空间结构
在这里插入图片描述
只读区:
.text段:指令段,存放汇编指令
.rodata段:常量段,存放常量
数据区:
.data段:存放已初始化且非0的数据
.bss段:存放未初始化或初始化为0的数据,操作系统会将数据段.bss部分清零
堆区:
.heap:空闲区,程序动态分配的内存区域
加载共享库区:用来存放加载的动态库
栈区:
.stack:存放局部变量的值,函数参数和返回值
命令行参数:./a.out 192.168.1.100
环境变量:程序搜索头文件和库文件默认的搜索路径

下面一段代码的分区示例:
在这里插入图片描述

或许会疑惑,局部变量为什么属于.text指令段,因为局部变量编译之后不会产生符号存入符号表中,只会产生汇编指令(mov dword ptr[a],0Ch),只有当运行时,才会在栈上开辟四字节空间存放局部变量的值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值