c++编译过程-各阶段任务

2023-09-19 22:45:38

首先,g++在编译源代码时,会经历下面几个阶段

-E   首先进行预处理,还是源代码格式.i

-S  编译器生成汇编语言.s

-c  汇编器生成二进制文件.o

-  链接库文件,其他代码.out

一.预处理

 预处理主要是

1.将#宏定义进行展开,

2.将头文件内容替换

3.去掉注释

二. 编译 

 编译主要是将预处理后的代码转换成汇编语言:

1.对代码进行语法分析,检查语法错误,

constexpr 声明的变量必须是在编译期计算得到,因而并不是所有的类型都能加 constexpr 声明的。能被 constexpr 声明的类型通常是“字面值类型”(literal type)。“字面值类型” 包括算术类型、引用、指针等,并且constexpr 声明的指针只能被赋值为 nullptr 或 0,或存储于某个固定地址的对象。这里“存储于某个固定地域的对象” 是指全局变量或静态局部变量

2.编译期分配内存

malloc分配内存指定分配大小,静态变量也在编译期间分配,指针在栈上分配

int a=100;编译期确定

内联在编译期。

sizeof编译期

if constexpr()

三.汇编 

汇编主要是将汇编语言转化成二进制代码

四.链接

 

五.载入

 

六.运行

 分配动态内存,即运行起来才分配,比如new,它的大小是不确定的,所以需要运行期间创建。

虚函数多态在运行期确定

模板也在运行期确定

int x=i;运行期;

更多推荐

驾驭Java线程池:一步一步带你从新手到高手!

驾驭Java线程池:一步一步带你从新手到高手!java框架中例如Tomcat、Dubbo等都离不开线程池,这些框架用到线程的地方,都会用线程池来负责。我们在使用这些框架的时候,会设置线程池参数,用于提高性能。那么开多少线程合适?今天我们将围绕这个问题来学习一下线程池。为什么使用线程池平常我们使用java线程的时候,都是

浅谈Rust内存管理

Rust因在内存管理上的独到之处,近年来受到了不少开发者的青睐。Rust内存管理的核心功能就是所有权。不同的语言采取了不同的内存管理方式,主要分为开发者手动管理或者编译器辅助管理,以及垃圾回收机制等。Rust的所有权机制,有别于这两者。堆栈内存我们知道程序会在堆或者栈上创建数据。栈上创建数据很容易,只要知道数据的大小,

WMS仓储管理系统的主要类型及其特性和适用场景

WMS仓储管理系统是物流管理系统中至关重要的一部分。它被广泛用于各个行业,包括制造业、零售业、物流业和运输业等。在选择适合的仓库管理系统时,企业需要根据自身的业务需求和运营模式进行考虑。本文将详细介绍四种常见的仓储管理系统类型,包括独立仓储管理系统、供应链管理系统中的仓储管理模块、ERP系统中的仓储管理模块和基于云的仓

R语言进行孟德尔随机化+meta分析(1)---meta分析基础

目前不少文章用到了孟德尔随机化+meta分析,今天咱们也来介绍一下,孟德尔随机化+meta其实主要就是meta分析的过程,提取了孟德尔随机化文章的结果,实质上就是个meta分析,不过多个孟德尔随机化随机化的结果合并更加加强了结果的可靠性。有部分人可能对meta分析不是很了解,咱们今天先来介绍一下meta分析基础,为下一

MySQL高频面试题

文章目录1.什么是MySQL?2.关系型数据库和非关系型数据库3.数据库三大范式是什么?4.一条SQL查询语句是如何执行的5.引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性6.索引16连问什么是索引?索引的优缺点?索引的作用?索引设计的原则?什么

Postman —— HTTP请求基础组成部分

一般来说,所有的HTTPRequest都有最基础的4个部分组成:URL、Method、Headers和body。(1)Method要选择Request的Method是很简单的,Postman支持所有的请求方式。(2)URL要组装一条Request(请求),URL永远是你首先要填的内容。在Postman里面,你曾输入过的

【Unity每日一记】资源加载相关和检测相关

👨‍💻个人主页:@元宇宙-秩沅👨‍💻hallo欢迎点赞👍收藏⭐留言📝加关注✅!👨‍💻本文由秩沅原创👨‍💻收录于专栏:unity每日一记⭐🅰️推荐文章⭐⭐【软件设计师高频考点暴击】⭐【Unityc#专题篇】之c#系统化大礼包】⭐【unity数据持久化】数据管理类_PlayerPrfs⭐【unity本

【python百炼成魔】Python循环语句:掌握while循环的实战应用

前言文章目录前言循环结构1.什么是循环结构2.python的while循环3.循环语句的图示while的使用案例1.使用while循环打印从1到5的数字2.计算1-100的偶数和3.模拟用户登录给三次机会4.猜数字游戏总结循环结构1.什么是循环结构循环结构是编程中的一种控制结构,用于重复执行一段代码块,直到满足特定的条

Vite 完整版详解

1.打包构建:Vite使用Rollup作为默认的构建工具。通过运行npmrunbuild命令,Vite会将应用程序的源代码打包成一个或多个优化的静态文件,以便在生产环境中进行部署。Vite的构建过程会根据需要进行代码拆分、压缩和优化,以提供最佳的性能和文件大小。#package.json{"scripts":{"bui

zabbix自定义监控内容案例

一、自定义监控内容案列:自定义监控客户端服务器登录的人数需求:限制登录人数不超过3个,超过3个就发出报警信息1、在客户端创建自定义key明确需要执行的linux命令创建zabbix监控项配置文件,用于自定义Key#在zabbix的配置文件中定义了会加载放在/etc/zabbix/zabbix_agent2.d/目录下,

动态代理解决方案

调用不同对象的相同方法,前后都有相应操作,用动态代理的方案完成.packagecom.hspedu.spring.proxy2;importjava.lang.reflect.InvocationHandler;importjava.lang.reflect.Method;importjava.lang.reflect

热文推荐