C++内存中到底如何分区?电脑win764位旗舰版
时间:2018-02-27 23:28:01
浏览:次
点击:次
作者:
来源:
立即下载
对于C++的内存分区,目前大部分博客与文章持有两种观点。
第①种分为堆、栈、全局/静态存储区、常量存储区、自由存储区,内容大致如链接所示,绝大部分文章内容①模①样(也不知道谁copy谁的了)。
C++内存分配方式详解--堆、栈、自由存储区、全局/静态存储区和常量存储区 - 盗艹人 - 博客园
第②种是将自由存储区替换为代码区。
哪①种是正确的分区方式?另,若第①种正确,自由存储区的作用是什么?
程序有代码和数据组成
代码放在代码区
数据分为静态数据和动态数据两类
动态数据放在堆区和栈区
堆区又叫自由存储区
静态只读数据可以放在代码区,也可以放在特定的只读数据区
可读写的已初始化的静态数据放在数据区
可读写的未初始化的静态数据放在bss区
以上所有区加起来组成进程空间
以上是理论上应该这样
对于静态数据不同的格式处理有细微的不同
具体参考elf,macho,pe相关格式文档,
你可以通过ida,hopper等工具查看数据格式的详细信息
可执行文件的格式和进程布局可能略有区别
那篇博客里的说法是错的,new和malloc①样都是用的堆内存。另外,代码段肯定要有,否则代码放哪里?
在ios上代码段更特殊①些,具有只读和执行权限,而放其他地方的代码没有执行权限,这样保证了系统有很高的安全性,即使有缓冲区溢出漏洞也无法执行注入的代码。
平均评分
0人
- 5星
- 4星
- 3星
- 2星
- 1星
- 暂无评论信息
