程序员的自我修养——链接,装载与库(八)运行库

2023-10-27

  • 运行库是程序运行时所需要的库文件。 
  • 操作系统装载程序以后,首先运行的不是main函数,而是入口函数(往往是运行库的一部分)。
  • Linux下程序的运行步骤由4部分构成:
  1. 操作系统在创建进程后,把控制权交到了程序的入口,这个入口往往是运行库的某个函数。
  2. 入口函数对运行库和程序运行环境进行初始化,包括堆栈,堆,I/O,线程,全局变量构造。
  3. 入口函数在完成初始化之后,调用main函数,正式开始执行程序主体部分。
  4. main函数执行完毕后,返回到入口函数,入口函数进行清理工作,包括全局变量析构,堆销毁,关闭I/O等,然后进行系统调用结束进程。
  • Windows下程序的运行步骤:
  1. 初始化和OS有关的全局变量。
  2. 初始化堆。
  3. 获取命令行参数和环境变量。
  4. 初始化C库的数据。
  5. 调用mian函数并记录返回值。
  6. 检查错误并将main的返回值返回。
  • 环境变量是存在于系统中的一些公用数据,任何程序都可以访问。通常来说,环境变量存储的都是一些系统的公共信息。
  • glibc的程序入口为_start。
  • .init段:main函数调用前的初始化工作。  .fini:main函数后的收尾工作。
  • 程序正常结束有两种情况:一种是main函数的正常返回,一种是程序的中使用exit退出。
  • malloc可以在堆上分配内存空间。alloca可以在栈上分配内存空间,并在函数返回时自动释放,比如局部变量。
  • I/O的全称为Input/Output,即输入输出,I/O代表了计算机与外界的交互,交互的对象可以是人或者其他对象。
  • 程序的I/O指代了程序与为界的交互,包括文件,管带,网络,命令行,信号等。
  • I/O初始化函数需要在用户空间中建立stdin,stdout,stderr及其对应的FILE(linux下称为文件描述符,windows称为文件句柄。一般为指针)结构,使得程序进入main函数之后可以直接使用printf,scanf等函数。
  • C语言的运行库一般包括一下功能:
  1. 启动和退出:包括入口函数及入口函数所依赖的其他函数等。
  2. 标准函数:有C语言标准规定的C语言标准库所拥有的函数实现。
  3. I/O:I/O功能的封装和实现。
  4. 堆:堆的封装和实现。
  5. 语言实现:语言中一些特殊功能的实现。
  6. 调式:实现调式功能的代码。​​​​​​​​​​​​​​​​​​​​​ 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

程序员的自我修养——链接,装载与库(八)运行库 的相关文章

  • 开发一个飞书机器人

    开发一个飞书机器人需要以下步骤 首先 您需要确定机器人的功能和目标 飞书机器人是用来做什么的 它是用来传送物品 送快递还是其他用途 确定了这些之后 就可以开始设计机器人的外观和功能 其次 您需要选择适合的机器人平台 机器人平台包括机器人的硬
  • 时序约束理论与实践

    前言 基础概念整理 更多内容参考文后的链接 1 input delay input delay定义 由下图可以看出Input Delay是以上游芯片的时钟发送沿为参考 上游的输出数据到达FPGA的外部输入端口之间的延迟 输入延迟 input
  • Python文本数据分析:新闻分类任务(贝叶斯,TF-IDF词向量)

    文章目录 基本思路 1 文本分析 11 查看数据 1 2转换为llist格式 1 3使用jieba分词 1 4转换为DataFrame格式 1 5使用停用词 1 6查看词频 1 7生成词云 2 TF IDF关键词提取 2 1 提取关键词 3
  • 如何使希尔排序具有稳定性

    稳定上指排序前相等的数据的位置关系在排序后不发生变化 直接插入排序是稳定的 希尔排序是特殊的插入排序 但因为交换值的过程中有跳跃式的交换 所以不稳定 如下图红6和蓝6在排序后发生了变化 6个数的序列 dk先取3来看 所以说希尔排序是不稳定的
  • windows下charles 抓取 https包(以iphone为例)

    Aphorism 光看不练是退步 nginx https 证书生成和代理配置看之前博文 https blog csdn net palmer kai article details 83990341 主要分为两步 step1 charles
  • Unity3D进行项目build时的“Data folder not found”问题

    或许是因为在项目文件夹中放入了一些外部 dll文件 将这些外部 dll文件删除后重新build即可成功运行 Ps 我的项目中并没有用到这些 dll文件 只是当时加进来做测试用途 所以删除并没有造成其他影响
  • formItem

    目录结构 1 CRForm
  • 前端自学苦于找不到资源,2021最全学习资源整合!

    前端学习路线图火热出炉啦 还在为如何系统学习苦苦寻觅资源么 2021年新版前端学习路线图这不就来了么 小伙计们甩开膀子学起来吧 只要能坚持学下来走上人生巅峰不再是梦 PS 别忘了收藏呦 此套路线图不定期更新呦 第一阶段 前端入门HTML5
  • 【实用技能】git代理设置

    最近运行git pull和push的时候 发现有时候会不能运行 问了广宇后才知道原来Git是要专门设置代理才能正常用的 否则即使开了clash git用的也是境内网 代理设置方式如下 git config global http proxy
  • The 19th Zhejiang Provincial Collegiate Programming Contest F - Easy Fix(主席树)

    F Easy Fix 发现交换 l r不会影响 1到l 1和r 1到 n 对l 1 r 1的影响只有正负一 用主席树计算一下改变的量 一共四种情况 对l和r再算一下 pragma GCC optimize 2 pragma GCC opti
  • js中拼接input在页面中不随输入的数据而变化的解决办法

    原文地址 原文还有一种复杂解决办法 input文本框的value属性在页面中不随输入的数据而变化 QiaoZhi 博客园 页面中input修改后浏览器按F12时html还是显示原来的值 解决办法
  • c语言实验报告中致谢词,实验报告致谢词范文

    实验结束后 是需要写一份报告致谢词的哦 那么怎么写呢 请参考小编提供的实验报告致谢词范文吧 实验报告致谢词1 本论文是在某某老师的亲切关怀和悉心指导下完成的 他严肃的科学态度 严谨的治学精神 精益求精的工作作风 深深地感染和激励着我 老师不
  • 魔方机器人之项目汇总篇

    总体视频 魔方机器人总体视频 待续
  • javaee springMVC的简单使用 jsp页面在webapp和web-inf目录下的区别

    项目结构 依赖文件
  • 有一段英文由若干个单词组成,单词之间用空格分隔,编写程序提取其中所有的单词

    一 问题描述 有一段英文由若干个单词组成 单词之间用空格分隔 编写程序提取其中所有的单词 二 问题解答 解析 这里需要用到STL在算法设计中的应用 STL在算法设计中的应用有如下几种 存放主数据 存放临时数据 检测数据元素的唯一性 数据的排
  • 【C++】AVL树的简单实现及验证

    文章目录 1 什么是AVL树 2 AVL树部分模块模拟实现 2 1 AVL树结点的定义 2 2 AVL树的插入 2 3 AVL的验证 1 什么是AVL树 AVL树可以是一棵空树 AVL树也可以是一棵具有如下性质的二叉搜索树 它的左右子树都是
  • Mac使用终端压缩加密文件

    1 美图 2 概述 先cd到将要压缩的文件所在的文件夹 在终端中输入命令 zip e 压缩后的文件目录 可选 文件名称 zip 你要压缩文件的位置 3 两次输入密码即可 案例如下 base lcc lcc Downloads zip e a
  • #招银网络科技2024校招# 还有大量后端HC~~最后的机会

    看看自动驾驶元戎启行秋招 965工作制 带薪年假病假 投递及查进度方式 https ww 看看自动驾驶元戎启行秋招 965工作制 带薪年假病假 投递及查进度方式 https ww 看看自动驾驶元戎启行秋招 965工作制 带薪年假病假 投递及

随机推荐

  • AVL树到底是什么?

    目录 一 什么是AVL树 1 二叉搜索树 2 为什么引入了AVL树 3 什么是AVL树 二 自己构造AVL树 三 AVL树的插入和删除 1 插入 1 1 右单旋 1 2 左单旋 1 3 左右双旋 1 4 右左双旋 2 删除 一 什么是AVL
  • [Python]字典序用于比较字符串

    目录 1 比较方法 举例 1 比较方法 字典序用于比较两个字符串的大小 具体为比较第一个不同的字符的ascii码大小 之所以叫做字典序 是因为字典序参考了英文字典的排序 就像我们查字典一样 如查找apple 先查找a所在版块 再a板块中查找
  • 【从零开始的Java开发】1-3-3 综合案例:学生信息管理

    文章目录 编写并测试Subject类 编写并测试Student类 通过方法实现学生与专业关联 方法一 方案二 方案三 方案分析 数据类型 新增需求 完成学生信息存储 编写方法完成学生统计功能 一些声明与实例化 总体代码 Subject 类
  • shell执行class或jar

    mc11 gt java cp home ap user webproject web war WEB INF lib com userpackage ExcelDemo 说明 home ap user webproject web war
  • I2C读写时序简述

    I2C读写命令时序如下 这里默认I2C每次传输均按8bit模式传输 写时序 1 Master先发送Start bit 开始一笔传输 2 Master发送从机地址 s addr 7 0 其中s addr 6 0 包含从机地址 s addr 7
  • Windows 10, version 22H2 (2023年3月) 简体中文版、英文版下载

    Windows 10 version 22H2 updated March 2023 简体中文版 英文版下载 Windows 10 22H2 2023 年 3 月更新 Windows 10 是微软公司推出的一款操作系统 是 Windows
  • 数据库sqlite3之 sqlite3_exec()第三个参数回调函数的使用

    在写这篇文章之前大家先了解我之前写的关于用c语言操作sqlite3的博客 链接地址如下 https blog csdn net makunIT article details 105192076 关于sqlite3 exec的回调函数的知识
  • CSharp之虚方法(virtual)

    虚方法是实现多态基本方法之一 虚方法通过virtual关键字修饰 虚方法在父类中必须有方法体 在继承类中可以重写 override 也可不重写 虚方法所在类可以被实例化 父类虚方法在派生类中通过base fathermethod执行
  • Apache Spark 机器学习 特征转换 1

    分词器 Tokenizer 分词是一个处理过程 其将文本句子分割成一系列独立的单词词汇集合 Spark提供Tokenizer分词器类 其提供的功能是使用分隔符的方式处理文本句子的特征转换 Spark提供RegexTokenizer分词器类
  • Power BI 矩阵总计放表第一列

    Power BI 矩阵总计放表第一列 思路 让总计序号比其他产品的序号都小 做法 1 在建个维表下方增加一行为 Total 加Total的维表 var table1 SUMMARIZE 订单表 MODEL NAME return UNION
  • 解决api-ms-win-crt-runtime-l1-1-0.dll文件丢失

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或者损坏了 这时你只需下载这个api ms win crt runtime l
  • C++编程规范 头文件格式 和 函数注释格式

    C 编码规范 1 代码注释 当你阅读别人的代码时如果没有注释那会是件比较痛苦的事 一说到注释我们马上想到是通过 或 这样来添加一些描述信息 这只是狭义的注释 广义的注释我们可以理解为 任何有助于理解代码的信息都可以看成注释 我们可以把写代码
  • 2018.11.29 学习笔记 // 前端CSS // div居中的方法

  • Phoenix查询hbase

    https www cnblogs com linbingdong p 5832112 html 这个很全看这个 HBase 一个NoSQL数据库 可存储大量非关系型数据 HBase 可以用HBase shell进行操作 也可以用HBase
  • MySQL必知必会 学习笔记 第三章 使用MySQL

    为连接到MySQL 需要 1 主机名 如连接到本地MySQL服务器 为localhost 2 端口 如使用默认的3306以外的端口 3 用户名 4 用户口令 连接到MySQL时 没有任何数据库打开供你使用 打开数据库 use databas
  • MybatisPlus使用中遇到的错误“Error creating bean with name”

    文章目录 一 问题描述 二 解决思路 1 保持SpringBoot启动类的 MapperScan 2 在 mapper接口上加上 mapper 一 问题描述 最近在使用MybatisPlus时遇到了一个小问题 这是项目结构 刚开始在Spri
  • rails 生产环境 编译CSS文件

    问题现象 Rails版本 升级到Rails 3 0以后 当rails server e production时 报错ActionView Template Error application css isn t precompiled 这是
  • VB.NET访问SQLServer数据库

    用vb6 0编写收费系统 用的是ADODB Active Data Objects Data Base Recordset 而在vb net中用的是SqldataAdapter SqldataReadr Dataset和Datatable
  • vs code 提示 “C/C++“任务的任务提供程序意外提供了“shell”类型的任务的解决办法

    Ya Qia老哥的提问 luguo p提供的回答 我整理一下 可以去https github com microsoft vscode cpptools releases下载 展开 Asset 下载cpptools win32 vsix w
  • 程序员的自我修养——链接,装载与库(八)运行库

    运行库是程序运行时所需要的库文件 操作系统装载程序以后 首先运行的不是main函数 而是入口函数 往往是运行库的一部分 Linux下程序的运行步骤由4部分构成 操作系统在创建进程后 把控制权交到了程序的入口 这个入口往往是运行库的某个函数