C++:C++编译过程:看完还不懂C++编译过程来捶我

news2025/1/10 18:31:56

1:先看图

2:一个C++源文件从文本到可执行文件经历的过程: gcc  Hello.cpp

  1. 预处理阶段:gcc -E hello.c  -o hello.i     对源代码文件中包含关系(头文件),预编译语句(宏定义)进行分析和替换,生成预编译文件。
  2. 编译阶段:gcc -s hello.i   -o  hello.s    将经过预处理后的预编译文件转换成特定汇编代码(编译原理相关,词法分析,语法分析,语义分析等),生成汇编文件。
  3. 链接阶段: gcc hello.o -o hello    将多个目标文件及所需要的库打包连接成最终的可执行目标文件(或库文件以供其他程序使用)

3:.c  .cc   .cpp 和 .h  .hpp  .inl 这些后缀名都有什么区别 

  1. C中:头文件后缀名 .h, 源文件后缀名 .c
  2. C++ 中: 头文件后缀名 .h  .hpp .hxx  ,源文件后缀名为:  .cpp    .cc  .cxx  
  3. .h和.hpp  的区别: *.h  里面只有声明,没有实现, 而 *.hpp 里面既有声明也有实现,后者可以减少 .cpp 数量,适合用来编写公用的 开源库
  4. inl 文件是 内联函数的源文件,内联函数通常在 C++头文件中实现,但有的时候,内联函数较多或者出于一些别的考虑(比如:头文件看起来更加简洁)往往会将这部分具体定义的代码添加到  INL文件中,然后在该头文件的末尾将其用  #include 引入。 由此也可以看到  inl 文件的一个用法影子  ------模板函数,模板类的定义的代码的存放。

4:gcc 和g++ 区别 

  • 简单来说:gcc 和g++都是 GNU组织的一个编译器,都可以编译C代码与 C++代码。但是,后缀为 .c的, gcc 把它当做 C程序,而g++当做 C++程序;后缀为 .cpp 的,两者都会认为是 C++程序。
  • 编译阶段:g++会调用gcc ,对于C++代码,两者是等价的,但是因为gcc 命令不能自动和C++程序使用的库联接,所以通常使用 g++来完成链接
  • gcc 编译cpp 可以使用命令:  gcc main.cpp -lstdc++

5: 静态链接,动态链接具体做了什么 

  • 静态链接是在形成可执行程序前,而动态链接的进行则是在程序执行时链接
  • 静态链接浪费空间,这是由于多进程情况下,每个进程都要保持静态链接函数的副本,更新困难,当链接的众多目标文件有一个改变后,整个程序都要重新链接才能使用新的版本,但是静态链接运行效率高。
  • 动态链接当系统多次使用同一个目标文件时,只需要加载一次即可,节省内存空间,程序升级变得容易,当升级某个共享模块时,只需要简单的将旧目标文件替换掉,程序下次运行时,新版目标文件会被自动装载到内存并链接起来,即完成升级
  • 静态链接时以目标文件为单位,将各个目标文件连接起来形成可执行文件
  • 动态链接的基本思想是把程序按照模块拆分成各个相对独立部分,在程序运行时才将他们链接在一起形成一个完成的程序,而不是像静态链接一样把所有程序模块都链接成一个单独的可执行文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/160107.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

React中如何拆分组件

基于自己工作中的体会,还有在做的过程中翻阅的资料,看的资料没有收藏起来,很想指出具体的出处,但是很多都是从各个地方看到的。不过都是在掘金、公众号前端开发、还有知乎上看到的。 😫 前言 随着web业务越来越复杂&a…

Elasticsearch(一)--Elasticsearch概述

一、前言 从本章开始,我将进入elasticSearch(后面简称es)的学习,同样也是通过书籍自学,并且会通过自己归纳和拓展将我觉得比较值得记录的知识点分享出来,如果大家觉得有用的话可以和我一起学习。我打算在总…

Kotlin

目录 一、Kotlin 基础语法 1、方法函数 2、常量 val 和变量 var 3、${} 字符串模板 4、null 处理 !!. 不能为空 ?.为空不处理 ?:为空处理成 5、is 类型转换 相当于 instanceof 6、Any 相当于 Java的 Object 二、Kotlin 基本数据类型 1、基本数据类型&#xf…

AMD出招,英特尔最不想看到的对手来了

前段时间的CES上,AMD正式发布Ryzen 7000的3D缓存版,对于游戏玩家来说,Ryzen 7000 3D缓存版算是今年最期待的CPU。上一代的Ryzen7 5800X3D凭借超强的游戏性能和性价比,在德国最大的PC硬件零售商的统计中,甚至成为2022年…

高并发系统设计 -- 大文件业务

上传 分片断点秒传(判断文件哈希值) 前端不断的发送请求,如果用户暂停上传的话,那么就是前端停止发送请求就可以了。我分片了,而且记录了分片的相关信息,所以实现了断点功能。 前端把文件进行分片&#…

ftp vsftp 登录

打开windows资管管理器(文件夹)输入目标路径,如:ftp://192.168.1.1输入账号密码。 删除用户已保存的密码(仅密码,名称记录还在) 两种方法都可以试试,适用不同情况 情况-方法一&am…

Set、Map、类数组,傻傻区分不清楚?

前言 大家都知道,数组和对象是两种不同的数据结构,虽说在js数据类型中都属于Object,但是还是有一定的区别,通过字面量以及isArray、instanceof等方法,我们很好区分这两者。由于使用场景的原因js中衍生了很多类似的数据…

基于java(springboot+mybatis)网上音乐商城设计和实现以及论文报告

基于java(springbootmybatis)网上音乐商城设计和实现以及论文报告 博主介绍:5年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言…

Spring Boot 热部署

Spring Boot 热部署一、添加热部署框架支持二、Settings 开启项目自动编译三、开启运行中热部署四、使用 Debug 启动 (非 Run)一、添加热部署框架支持 或者右击鼠标添加依赖: 或者使用插件: 二、Settings 开启项目自动编译 三、开启运行中热部署 老版…

【数据库概论】第一章 绪论

第一章 绪论 1.1 数据库系统概述 数据库的四个基本概念 1.数据 数据是数据库中存储的基本对象,一般数据是描述事物的符号记录,这种符号记录可以输数字,也可以是文字、徒刑、音频等。 2.数据库 数据库是长期存储在计算机内有组织的&…

Leetcode动态规划题解

第一题 509. 斐波那契数 题目描述:斐波那契数(通常用 F(n) 表示)形成的序列称为斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是: F(0) 0,F(1) 1 F(n) F(n - 1) …

【计算机网络】计算机网络基础

计算机是人类社会不可或缺的工具,而单独的一台计算机的功能也是有限的,计算机需要和其它的设备相互连接通信形成的计算机网络才能对人类发展带来巨大的影响。 目录 计算机网络 通信协议 网络结构 网络边缘 接入网 网络核心 时延和吞吐量 时延 吞…

.Net Core6.0项目发布在IIS上访问404的问题

ASP.Net Core6.0项目发布在IIS上访问404的问题 进入线程池画面,将当前程序的线程池设为“无托管代码” 修改配置文件 Web.config,以下缺一不可 需要引用架包:Swashbuckle.AspNetCore.SwaggerUI.NetCore 6.0 自带集成了Swagger , 在发布项目时…

C++模板(函数模板、类模板)

目录 一、泛型编程 二、函数模板 函数模板概念 函数模板格式 函数模板的原理 函数模板的实例化 模板参数的匹配原则 三、类模板 类模板的定义格式 类模板的实例化 四、扩展 函数模板一定是推演?类模板一定是指定? 模板的分离编译 一…

MySQL高级【行级锁】

1:行级锁1.1:介绍行级锁,每次操作锁住对应的行数据。锁定粒度最小,发生锁冲突的概率最低,并发度最高。应用在 InnoDB存储引擎中。 InnoDB的数据是基于索引组织的,行锁是通过对索引上的索引项加锁来实现的&a…

WPF中Binding数据校验、并捕获异常信息的三种方式

Binding数据校验、并捕获异常信息的三种方式 WPF在使用Binding时,经常需要进行数据校验,如果校验失败需要捕获失败的原因,并加以展示,本文主要介绍数据校验异常并捕获的三种方式。 依赖属性异常捕获 先定义一个依赖属性 publi…

【Nacos】Nacos配置中心的使用与SpringCloud整合

在微服务架构中,当系统从一个单体应用,被拆分成分布式系统上一个个服务节点后,配置文件也必须跟着迁移(分割),这样配置就分散了,不仅如此,分散中还包含着冗余。配置中心将配置从各应…

哪儿有微服务开源项目?

随着数字化时代的到来,微服务开源项目的应用价值逐渐凸显。作为提升企业办公协作效率的低代码开发平台项目,其表现出来的灵活性、易操作、简便的特性,成为现代化办公管理中的重要合作伙伴。我们今天一起来了解什么是微服务开源项目。 一、微服…

基于JavaWeb实现蜀南调味品商城物流配货系统

一、项目介绍 本文系统利用JavaWeb技术,设计和实现了连接公司、客户公司、物流运输为桥梁的销售配送管理系统,并以网络技术和信息技术在销售配送中的应用为重点,实现员工登录模块、员工信息管理模块、库存管理模块、订单处理模块、包装管理模…

高通Wi-Fi 7网络芯片方案IPQ9574,IPQ9554,IPQ9514,IPQ9570,IPQ9550,IPQ9510

networking pro 1620:芯片型号IPQ9574,支持4频段16路数据流,峰值速率33Gbps,支持4个2.5G口,1个5G口,1个万兆口;networking pro 1220:芯片型号IPQ9574,支持3频段12路数据流…