C之内存布局(三十六)

我们在上节中说到了栈区、堆区以及静态存储区,那么我们来看看在程序文件的一般布局。我们先来看看不同代码在可执行程序中的对应关系,如下图所示

我们看到程序中的经过初始化的全局变量和加 static 修饰的初始化过后的局部变量都放在 .data 段,未经初始化的全局变量和加 static 修饰的局部变量都放在 .bss 段,函数和函数调用都放在 .text 段。

我们下来看看程序和进程的区别,程序是静态的概念表现为一个可执行文件,而进程是动图的概念,程序由操作系统加载运行后得到进程。每个程序可以对应多个进程,但是每个进程只能对应一个程序。我们举例来说,一个浏览器就相当于是程序,它没运行就没有对应的进程。但是我们可以同时多次打开同一个浏览器,这时每个打开的浏览器就相当于是一个进程。

我们在面试中有时会遇到这样的问题:包含脚本代码的文本文件是一种类型的可执行程序吗?如果是,它对应什么样的进程呢?我们想的是脚本程序嘛,就肯定能直接运行哈,那它会对应什么样的进程呢?不知所云了。哈哈,我们来看看一般的可执行程序和脚本文件的区别,如下图所示

我们看到可执行程序是由操作系统直接加载的,便直接对应了一个进程。但是我们运行脚本文件之后,那么操作系统中会有对应的脚本解释程序,经脚本解释程序执行后,便产生对应的进程,这个进程反过来读取并解释执行脚本。这样脚本文件就得到运行啦。

下来我们来看看文件布局在内存中的映射

我们看到可执行程序 a.out 中分为头文件、.text、.data 以及 .bss 段。对应在进程中便去掉了头文件而加上了栈和堆。那么我们接下来讲讲各个段的作用,堆栈段在程序运行后才正式存在,是程序运行的基础; .bss 段存放的是未初始化的全局变量和静态变量; .text 段存放的是程序中的可执行代码; .data 段保存的是已经初始化了的全局变量和静态变量; .rodata 段存放程序中的常量值,如字符串常量。

静态存储区通常指程序中的 .bss 和 .data 段;只读存储区通常指程序中的 .rodata 段;局部变量所占空间为栈上的空间;动态空间为堆中的空间;程序可执行代码存放于 .text 段。

那么我们想下,同是全局变量和静态变量,为什么初始化的和未初始化的需要保存在不同段中呢?通常在编译器中,没有初始化的变量,我们都要初始化为 0,如果我们一个一个的去检查,是不是效率就很低呢?如果我们分开存放,那么那些已经初始化过的变量就不用去检查了,从而效率会变高。

通过对程序文件中内存布局的学习,总结如下:1、程序源码在编译后对应可执行程序中的不同存储区;2、程序和进程不同,程序是静态概念,进程是动图概念;3、堆栈段是程序运行的基础,只存在于进程空间中;4、程序可执行代码存放于 .text 段,是只读的;5、.bss 和 .data 段用于保存全局变量和静态变量。

欢迎大家一起来学习 C 语言,可以加我QQ:243343083。

原文地址:http://blog.51cto.com/12810168/2108339

时间: 2024-10-12 07:41:00

C之内存布局(三十六)的相关文章

Gradle 1.12用户指南翻译——第三十六章. Sonar Runner 插件

本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://github.com/msdx/gradledoc/tree/1.12. 直接浏览双语版的文档请访问: http://gradledoc.qiniudn.com/1.12/userguide/userguide.html. 另外,Android 手机用户可通过我写的一个

QT开发(三十六)——Model/View框架

QT开发(三十六)--Model/View框架 一.Model/View框架简介 1.Model/View框架核心思想 Model/View框架的核心思想是模型(数据)与视图(显示)相分离,模型对外提供标准接口存取数据,不关心数据如何显示,视图自定义数据的显示方式,不关心数据如何组织存储. Model/View框架中数据与显示的分离,可以允许使用不同界面显示同一数据,也能够在不改变数据的情况下添加新的显示界面.为了处理用户输入,引入了委托(delegate).引入委托的好处是可以自定义数据项的渲

2018-08-24 第三十六课

第三十六课 非关系统型数据库-mangodb 目录 二十四 mongodb介绍 二十五 mongodb安装 二十六 连接mongodb 二十七 mongodb用户管理 二十八 mongodb创建集合.数据管理 二十九 php的mongodb扩展 三十 php的mongo扩展 三十一 mongodb副本集介绍 三十二 mongodb副本集搭建 三十三 mongodb副本集测试 三十四 mongodb分片介绍 三十五 mongodb分片搭建 三十六 mongodb分片测试 三十七 mongodb备份

微信小程序把玩(三十六)Storage API

原文:微信小程序把玩(三十六)Storage API 其实这个存储在新建Demo的时候就已经用到了就是存储就是那个logs日志,数据存储主要分为同步和异步 异步存储方法: 存数据 wx.setStorage(object) 相同key会覆盖,可写回调方法 获取方法: wx.getStorage(object) 清除方法: wx.clearStorage()里面可以写回调函数 成功,失败,完成 同步存储方法: 存数据 相同key会覆盖 wx.setStorageSync(key,data) 读数据

NeHe OpenGL教程 第三十六课:从渲染到纹理

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第三十六课:从渲染到纹理 放射模糊和渲染到纹理: 如何实现放射状的滤镜效果呢,看上去很难,其实很简单.把渲染得图像作为纹理提取出来,在利用OpenGL本身自带的纹理过滤,就能实现这种效果,不信,你试试. 嗨,我是Dario Corn

三十六、git clone简介

翻译整理自: http://web.mit.edu/~mkgray/project/silk/root/afs/sipb/project/git/git-doc/git-clone.html 在使用git来进行版本控制时,为了得一个项目的拷贝(copy),我们需要知道这个项目仓库的地址(Git URL). Git能在许多协议下使用,所以Git URL可能以ssh://, http(s)://, git://,或是只是以一个用户名(git 会认为这是一个ssh 地址)为前辍. 有些仓库可以通过不只

CCNA实验三十六 GRE(通用路由封装)  

CCNA实验三十六 GRE(通用路由封装) 环境:Windows XP .Packet Tracert5.3 目的:了解GRE的使用,掌握如何配置GRE. 说明: GRE(Generic Routing Encapsulation,通用路由封装)协议是对某些网络层协议(如IP 和IPX)的数据报文进行封装,使这些被封装的数据报文能够在另一个网络层协议(如IP)中传输.GRE采用了Tunnel(隧道)技术,是VPN(Virtual Private Network)的第三层隧道协议. Tunnel

Python进阶(三十六)-Web框架Django项目搭建全过程

Python进阶(三十六)-Web框架Django项目搭建全过程 ??IDE说明: Win7系统 Python:3.5 Django:1.10 Pymysql:0.7.10 Mysql:5.5 ??Django 是由 Python 开发的一个免费的开源网站框架,可以用于快速搭建高性能,优雅的网站! Django 特点 强大的数据库功能 用python的类继承,几行代码就可以拥有一个丰富,动态的数据库操作接口(API),如果需要你也能执行SQL语句. 自带的强大的后台功能 几行简单的代码就让你的网

[原创]ActionScript3游戏中的图像编程(连载三十六)

2.2.9 Photoshop品质初探——等高线 我们点击等高线图标右侧的箭头,将弹出一个曲线列表(图 2.30). 图 2.30 等高线下拉列表 点击第二行第4个图标看看(图 2.31).哇塞,一个逆天的浮雕式投影效果. 图 2.31 给投影样式设置等高线 下面我们不妨开一下小差,做点好玩的东东,比如给投影拉出一点杂色,再将文字调成灰色(#CCCCCC),填充不透明度80%,同时把图层的混合模式改为“溶解”(混合模式将在后续章节给出详细的介绍),投影的挖空去掉,看起来就想雕刻在石碑上的文字.(

ActionScript3游戏中的图像编程(连载三十六)

2.2.9 Photoshop品质初探--等高线 我们点击等高线图标右侧的箭头,将弹出一个曲线列表(图 2.30). 图 2.30 等高线下拉列表 点击第二行第4个图标看看(图 2.31).哇塞,一个逆天的浮雕式投影效果. 图 2.31 给投影样式设置等高线 下面我们不妨开一下小差,做点好玩的东东,比如给投影拉出一点杂色,再将文字调成灰色(#CCCCCC),填充不透明度80%,同时把图层的混合模式改为"溶解"(混合模式将在后续章节给出详细的介绍),投影的挖空去掉,看起来就想雕刻在石碑上