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星
用户评分:
发表评论

评论

  • 暂无评论信息