进程中bss、数据段、代码段、堆、栈之间的关系

进程指的是一个程序在操作系统中的动态执行,进程是操作系统资源分配和调度的基本单位。
线程是程序执行的最小单位,一个进程中会有一个或者多个线程。

进程与线程的最大区别在于: 进程是系统资源分配的基本单位,线程是系统调度的基本单位。

linux进程中有5个数据段:
BSS段(bss segment):  通常指用来存放程序中未初始化的全局变量中的一块内存区域。BSS段属于静态内存分配。
数据段(data segment):    通常指用来存放程序中已初始化的全局变量中的一块内存区域,也属于静态内存分配。
代码段(code segment/text segment): 中场指用来存放程序执行代码的一块内存区域,这部分区域的大小在程序运行前就已经确定,并且内存区域通常会被设置为只读权限,当然在某些架构中也允许代码段可写,即允许修改程序,在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。

堆(heap):  用于存放进程运行中被动态分配的内存段,大小并不固定,可动态扩张或缩减,当进程调用malloc等函数分配时,新分配的内存就被动态的添加到堆上,当调用free等函数释放内存时,被释放的内存就会从堆中被剔除(堆被缩减)。

栈(stack): 又称为堆栈,是用户存放程序临时创建的局部变量,当函数被调用时,其参数(本质是寄存器,eax,ebx)会被压入堆栈中,待调用函数执行完毕后,被压入堆栈的参数就会被pop出来。另外函数体中定义的临时变量会被存放于堆栈中,堆栈是由操作系统分配

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值