C++的global data的位置 及PE 文件中的section的内容
来源:互联网 发布:ubuntu 14.04安装分区 编辑:程序博客网 时间:2024/06/07 16:31
1. 情况一:
int a = 5;
a 在.data section 里面
2. 情况二:
const int a = 5;
a 在 .rdata section里面
扩展:
一般C语言的编译后执行语句都编译成机器代码,保存在.text段。
已初始化的全局变量和局部静态变量都保存在. data段
未初始化的全局变量一般放在一个叫.“bss”的段里。
总体来说,程序源代码被编译以后主要分成两种段:程序指令和程序数据。代码段属于程序指令,而数据段和.bss段属于程序数据。
很多人可能会有疑问:为什么要那么麻烦,把程序的指令和数据的存放分开?混杂地放在一个段里面不是更加简单?其实数据和指令分段的好处有很多。主要有如下几个方面。
程序的指令和数据分开原因
l 一方面是当程序被装载后,数据和指令分别被映射到两个虚存区域。由于数据区域对于进程来说是可读写的,而指令区域对于进程来说是只读的,所以这两个虚存区域的权限可以被分别设置成可读写和只读。这样可以防止程序的指令被有意或无意地改写。
l 另外一方面是对于现代的CPU来说,它们有着极为强大的缓存(Cache)体系。由于缓存在现代的计算机中地位非常重要,所以程序必须尽量提高缓存的命中率。指令区和数据区的分离有利于提高程序的局部性。现代CPU的缓存一般都被设计成数据缓存和指令缓存分离,所以程序的指令和数据被分开存放对CPU的缓存命中率提高有好处。
l 第三个原因,其实也是最重要的原因,就是当系统中运行着多个该程序的副本时,它们的指令都是一样的,所以内存中只须要保存一份改程序的指令部分。对于指令这种只读的区域来说是这样,对于其他的只读数据也一样,比如很多程序里面带有的图标、图片、文本等资源也是属于可以共享的。当然每个副本进程的数据区域是不一样的,它们是进程私有的。不要小看这个共享指令的概念,它在现代的操作系统里面占据了极为重要的地位,特别是在有动态链接的系统中,可以节省大量的内存。比如我们常用的Windows Internet Explorer 7.0运行起来以后,它的总虚存空间为112 844 KB,它的私有部分数据为15 944 KB,即有96 900 KB的空间是共享部分(数据来源见图3-2)。如果系统中运行了数百个进程,可以想象共享的方法来节省大量空间。
- C++的global data的位置 及PE 文件中的section的内容
- PE文件中各种Section的含义
- log4j文件的放置位置及内容
- PE section 的标志位
- 读书笔记,关于pe file的section及pragma命令
- python读取指定字节及位置的文件内容
- PE文件学习之一 文件内容的分部
- Global文件的作用
- Global文件的作用
- PE文件详解-----PE文件的简介
- 文件的指定位置读取内容
- PE文件的运行
- .bss section 的觀念:uninitialized data section
- 由PE中删除Section而牵出的内幕
- 10.Global.asa文件的使用及Chat程序
- Global.asa文件的使用及Chat程序
- Global.asa文件的使用及Chat程序
- ASP教程:Global.asa文件的使用及Chat程序
- 使用Xcode和Instruments调试解决iOS内存泄露
- win7 IIS7.5/7.0 配置伪静态
- HTTP 错误 404.17 - Not Found 请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理
- Write Code As If You Had to Support It for the Rest of Your Life
- HDU 2102 A计划
- C++的global data的位置 及PE 文件中的section的内容
- 数据规范化笔记
- C++下用什么矩阵运算库比较好
- 7.9(lwip)
- css3 transform
- verilog FPGA网络资源
- 使用Swiper框架模仿Swiper中文官网的效果Demo
- json字符串转换为json对象,表单json
- Oracle 11g必须开启的服务及服务详细介绍,oracle的命令大全