C程序的内存结构

2023-05-16

        以类Unix环境下的程序运行为例,说明C程序的运行过程和内存分配,windows环境下原理一致,但实现细节会有区别,所以首先我们要明白:程序的内存布局(Program Memory Layout)是与操作系统相关的。尽管技术的发展非常迅速,但这些原理性的东西始终是基础。

        类Unix环境下,C程序在执行main函数之前(符合标准的main函数,其形参还包括有环境变量,因为我们执行程序都是在Shell下面),会先利用操作系统提供的系统调用和exec函数来进行一些初始化操作,最后才转移到main函数体内。整个程序在进行装载后在内存中运行,使用逻辑地址来进行表示,通常是由以下的一些区域构成(段的概念详见《微机原理》中的叙述,与内存的管理方式有关):

文本段(text segment):例如CPU执行的机器指令,通常文本段是只读性质的,还有文字常量区,例如字符串常量会放在该段。

简单数据段(initialized data segment):初始化的全局变量或者初始化的静态变量。

bss段(uninitialized data segment):未初始化的全局变量等。

栈(stack):局部变量,以及函数形参等,强调变化。

堆(heap):动态内存,需要由程序自己处理释放问题。

下面的程序在main函数退出之前运行一段代码,通过了解atexit函数可以理解main函数在类Unix操作系统中的标准定义(windows原理一致):

#include <stdio.h>

#include <stdlib.h> 

void bye(void)

{

    printf("byebye!\n");

}

int main(int argc, char *argv[])

{

    (void)atexit(bye);

    return (0);

}

 

参考资料:

[1] 《Advanced Programming in the UNIX® Environment: Second Edition》,W. Richard Stevens,Stephen A. Rago

[2] http://linuxgazette.net/issue84/hawk.html

[3] http://linux.die.net/man/3/atexit
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C程序的内存结构 的相关文章

随机推荐

  • django项目初始化

    django项目初始化 1 为了方便管理app xff0c 我们添加专门的apps文件夹来存放所有的app 结构如下 1 1设置完apps文件夹以后我们需要对配置文件做相应的更改 1 1 1 在seetings py里添加django文件的
  • 关于 Linux 输入正确账号密码显示 Sorry,that did not work的问题

    解决办法 xff1a 1 设置用户名时不要以数字开头 xff0c 字母和下划线都是可以的 xff0c 2 字母设置时记得开没开大小写 xff0c 在输入账号密码时大写Capslock是没用的 xff0c 要 shift 43 字母 xff0
  • 最小二乘与最大似然估计之间的关系

    在测量误差服从高斯分布的情况下 xff0c 最小二乘法等价于极大似然估计 Ref xff1a 最小二乘法与极大似然估计的区别与联系 最小二乘与最大似然估计之间的关系
  • Python使用pydub库对mp3与wav格式进行互转的方法

    我们需要用到一个叫pydub的类库 xff0c pydub是python的高级一个音频处理库 xff0c 可以让你以一种不那么蠢的方法处理音频 开发者原话 1 https github com jiaaro pydub 附上开发者的gith
  • 安装docker,vulhub

    1 sudo apt install apt transport https ca certificates curl gnupg agent software properties common 2 curl fsSL https dow
  • 5GC移动性管理(5GS mobility management ,5GMM)

    主要内容 介绍5GC中移动性管理功能的实现 注册管理状态模型连接管理状态模型UE Context的构成用户标识符 xff08 SUPI SUCI PEI等 xff09 移动性管理限制及术语 xff08 注册区 禁止区域 服务受限区域 xff
  • 云计算实战系列三(Linux文件管理)

    文件管理 1 Linux目录结构 1 1 WINDOWS LINUX 对比 Windows 以多根的方式组织文件 C D E Linux 以单根的方式组织文件 1 2 简介 目录结构 xff1a FSH Filesystem Hierarc
  • hashCode()和equals()的区别

    一 hashCode 和equals 是什么 xff1f hashCode 方法和equals 方法的作用其实一样 xff0c 在Java里都是用来对比两个对象是否相等一致 二 hashCode 和equals 的区别 下边从两个角度介绍了
  • debian下smplayer播放视频无声音的问题

    请先安装解码器和smplayer 解码器essential 20071007 tar bz2一般都是手动安装 xff0c smplayer使用apt get install即可 安装过程 xff0c 参考mplayer官网步骤 xff1a
  • iOS可视化界面编程XIB简单使用

    iOS的UI界面的编写现在基本分为三个流派 手写代码XIBStoryBoard 三者区别 本文主要介绍XIB的简单使用 xff0c 基于XIB在界面上放几个按钮并生成点击事件代码 以下代码及截图基于XCode12 快速创建 1 创建文本对象
  • 方面情感分析的四个情感元素介绍

    方面情感分析介绍 一般情感分析的问题由两个部分组成 xff1a 目标和情绪 目标可以是实体也可以是实体的某一个属性 xff0c 方面 xff0c 特点等等 xff0c 情绪是表达对目标的感情 xff0c 这里一般是积极 xff0c 消极 x
  • go中使用sqlite

    1 安装mingw64 1 1 下载mingw sqlite作为一个快速开发的数据库 xff0c 理应被go支持 xff0c 但是要在go里面使用sqlite xff0c 实际上是要下载sqlite的源代码编译的 xff0c 当然 xff0
  • map 详解(C++)

    现实中的数据很多是关联的 xff0c 例如书本名称和价格 xff0c 每条数据都含有两部分 xff1a 信息学竞赛一本通 xff1a 80 高等数学 xff1a 27 5 生物信息分析 xff1a 35 5 我们可以使用map存储这类一对一
  • 详解Ubuntu文件的结构

    首先我们知道 xff0c linux系统文件结构和windows系统文件结构不同之处在于 xff0c linux系统文件统一挂载在根目录下的 xff0c 而windows系统的文件是分磁盘挂载的 windows下通常分C盘D盘E盘等 xff
  • Go 语言 exec 实时获取外部命令的执行输出

    Go 语言 exec 实时获取外部命令的执行输出 在 Go 语言中调用外部 Linux 命令可以通过标准的 os exec 包实现 xff0c 我们一般的使用方式如下 xff1a span class token keyword packa
  • ubuntu 18.04 arm64版 安装docker 踩坑

    一 安装ubuntu 18 04系统 可以参考该系列其他文章 二 安装docker 1 先卸载可能存在的旧版本 apt remove docker docker span class token operator span engine d
  • Linux网络中的桥 (Bridge)

    桥简介 桥 xff0c 从字面来讲就是在一条河流上面建造一条路 xff0c 对 xff0c 就是这样 xff0c 甭管是多大多长跨江还是跨海 xff0c 它都是起到连接两岸的作用 在计算机的网络世界中也存在这种连接的两个网络的设备 xff0
  • MySQL8.0 开启远程连接

    一 MySQL 开启远程连接需要先在服务器上登录到 MySQL mysql u root p 1 然后 Enter password 二 修改 root 账户的 Host 1 打开 mysql 数据库 use mysql 1 2 查看 us
  • 实时天气API

    restful接口查询天气 实时天气 API 和风天气开发平台 实时天气 全国4000 个市县区和海外15万个城市实时天气数据 包括实时温度 体感温度 风力风向 相对湿度 大气压强 降水量 能见度 露点温度 云量等数据 请求URL nbsp
  • C程序的内存结构

    以类Unix环境下的程序运行为例 xff0c 说明C程序的运行过程和内存分配 xff0c windows环境下原理一致 xff0c 但实现细节会有区别 xff0c 所以首先我们要明白 xff1a 程序的内存布局 Program Memory