二进制 1:内存分配

一、常见段

1、text / code

【通常属于只读,代码段是可共享的,从而节省内存资源】 存放程序执行的机器指令(这部分区域的大小在程序运行前就已经确定)

2、data

【静态内存分配,‌其生命周期与程序的执行周期相同】

  • 被初始化的全局变量
  • 静态变量(‌包括全局静态变量和局部静态变量)‌
  • 常量数据
  • class中的初始化的静态成员

3、bss

【静态内存分配,变量在程序开始执行前不会被分配具体的内存值,‌而是在程序执行时才被赋予初始值】

  • 未初始化的全局变量
  • 未初始化的静态变量(局部变量+全局变量)
  • 初始化为0的全局变量or静态变量
  • class中的未初始化的静态成员

4、HEAP

【动态内存分配,需要显式地申请和释放空间】 程序手动malloc和free的区域

5、STACK

【栈由操作系统分配和管理,‌不需要程序员显式管理】

用于存放函数的参数值、局部变量的值、以及在进行任务切换时存放当前任务的上下文内容。

二、常见段

text:【R+X】可执行指令

data:【R+W】已初始化的全局变量 / 静态变量

bss:【R+W】未初始化的全局变量 / 静态变量

rodata:【R】只读数据

三、常见问题汇总

0x1(单选)下面哪种变量定义不当,可能导致堆栈溢出

A. 静态全局变量 B. 动态全局变量 C. 静态局部变量 D. 动态局部变量(v)

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务