当前位置: 首页 > java >正文

【C/C++】虚拟内存空间问题整理_可用于验证掌握情况

🧱 一、总览结构类问题(Memory Layout)

  1. Linux 进程的虚拟地址空间是如何划分的?主要有哪些区域?
  2. 进程虚拟地址空间的增长方向是怎样的?各区域是向高地址还是低地址增长?
  3. 32位与64位下虚拟地址空间的差异有哪些?地址上限是多少?
  4. 用户态和内核态地址空间分别占多少?在哪个范围?
  5. 进程的每个虚拟地址是否都有对应的物理内存?

📄 二、Text(代码段)

  1. 代码段在进程虚拟地址空间的哪一部分?它的访问权限是什么?
  2. 常量字符串是否存储在 text 段中?为什么?
  3. 是否可以修改 text 段中的内容?如果尝试写会发生什么?
  4. 多个进程是否可以共享 text 段?

📦 三、Data(已初始化数据段)

  1. 什么样的变量存储在数据段中?请举例说明。
  2. 数据段的内存权限默认是什么?可以执行吗?
  3. 全局变量和静态变量都在数据段吗?

🐣 四、BSS(未初始化数据段)

  1. BSS 和数据段有什么区别?

  2. 以下代码中变量a和变量b分别在哪个段中?

    int a = 0; // ?
    int b;     // ?
    
  3. BSS段在物理内存中是否占空间?程序启动前是如何初始化的?

  4. BSS段的大小能否通过查看编译后的 ELF 文件得知?


🌱 五、Heap(堆)

  1. 堆区的分配从哪个系统调用接口开始?默认增长方向是什么?
  2. 使用 malloc/free 时实际是操作堆区吗?背后调用了什么?
  3. 堆区的起始和结束地址如何查看?
  4. heap 使用的内存分配机制是基于哪两个系统调用?
  5. 堆内存什么时候会被内核收回?

🌀 六、Stack(栈)

  1. 栈的增长方向是怎样的?
  2. 局部变量和函数参数存储在栈中还是堆中?
  3. 栈溢出会导致什么错误?Linux 默认栈大小是多少?如何修改?
  4. 递归函数调用栈太深会发生什么?如何调试?
  5. 每个线程是否有独立的栈空间?怎么控制其大小?

📚 七、Memory-mapped Region(mmap 区)

  1. 什么是 mmap 区?由谁管理?通常用于什么目的?
  2. 动态库的加载是否属于 mmap 区域?
  3. 使用 malloc 时什么时候会转向使用 mmap?
  4. 匿名 mmap 与文件映射 mmap 有何区别?
  5. 使用 mmap 分配内存和 malloc 的最大区别是什么?

🧪 八、虚拟内存和物理内存映射相关问题

  1. 如何通过页表实现虚拟地址到物理地址的映射?
  2. 一个虚拟地址可能对应多个物理地址吗?反之呢?
  3. TLB(Translation Lookaside Buffer)在虚拟地址转换中起什么作用?
  4. 如何查看某个进程的虚拟内存布局?用哪个命令?
  5. 某段虚拟内存被 swap 到磁盘时会发生什么?

🔐 九、内存权限控制(Protection)

  1. 各段的典型权限是什么(如 text、data、heap、stack)?
  2. 使用 mprotect() 可以做什么?举例说明其作用。
  3. 什么是 NX(Non-eXecutable) 位,它有什么安全作用?
  4. 可以让堆或栈变为可执行吗?如何操作?有何风险?

🔍 十、实用调试/查看命令类

  1. 如何使用 /proc/[pid]/maps 来查看进程的内存映射?能看到哪些信息?
  2. 如何使用 pmap 命令查看进程各段占用的内存?
  3. 如何使用 gdb 查看某个变量所在的内存段?
  4. 如何判断内存是否映射了共享对象(.so 文件)?
  5. valgrind 检测内存访问错误和泄漏时,是如何理解各段内存的?

🚧 十一、其他高级内存区域相关

  1. 什么是匿名映射?在 mmap 区中怎么实现匿名共享内存?
  2. Thread Local Storage(TLS)在内存中属于哪个区域?
  3. VDSO 是什么?它位于哪个区域?作用是什么?
  4. 栈溢出与堆溢出在内存结构上有何区别?如何防护?
  5. 如何使用 ulimit 控制进程的堆/栈大小?
http://www.xdnf.cn/news/8264.html

相关文章:

  • WebTransport 低延迟通信
  • 解决SQL Server SQL语句性能问题(9)——创建和更新统计对象
  • Spring的事务传播行为
  • PCB设计教程【入门篇】——电路分析基础-电路定理
  • tf 重排 切分 逆排列
  • mysql日志文件binlog分析记录
  • 结构性断裂:中年失业潮与婚姻解体的崩溃逻辑
  • 数学基础知识:三角函数
  • 【打卡】车厢重排
  • java后端-海外登录(谷歌/FaceBook/苹果)
  • 汽配知识(四)不同车型与区域市场的分类差异
  • 率先实现混合搜索:使用 Elasticsearch 和 Semantic Kernel
  • Java IO流完全解析:从基础到高级应用
  • Vue.js教学第十一章:VueRouter实战指南
  • 在 Matter.js 物理引擎中,isSensor 布尔属性的使用
  • MySQL 数据库表结构修改与字段添加
  • C++:关联容器set容器,multiset容器
  • 【Python】开发工具uv
  • KS107BG型超声体模的结构及性能
  • Pinia持久化存储插件, 持久化存储插件安装(超详细教程)
  • 【KWDB 2025 创作者计划】_KWDB时序数据库特性及跨模查询
  • 使用 vip 加入两台 master 节点
  • 【AI模型学习】上/下采样
  • 【SpringBoot实战指南】使用 Spring Cache
  • 5.22 打卡
  • 生存资料的多因素分析,如果满 足等比例风险假定, 采用Cox回归; 如果不满足等比例风险假定,则考虑采用 非等比例Cox回归分析研究预后因素的影响
  • Java版本的VPN(wlcn)
  • 我的世界模组开发——物理学(1)
  • PiliPlus 非常好用的开源软件第三方B站哔哩哔哩 v1.1.3.35
  • Vue 3.0中异步组件defineAsyncComponent