当前位置: 首页 > news >正文

网站建设中的板块名称网站快照优化公司

网站建设中的板块名称,网站快照优化公司,网络艺术设计是什么,wordpress页面右上如果你是一名newbird的话,建议观看如下视频加深你的理解,再看如下内容: https://www.bilibili.com/video/BV1N24y1B7nQ?p7 The cherno会额外告诉你如何将目标文件转换成汇编代码,CPU执行指令的过程以及编译器如何通过删除冗余变…

如果你是一名newbird的话,建议观看如下视频加深你的理解,再看如下内容:
https://www.bilibili.com/video/BV1N24y1B7nQ?p=7
在这里插入图片描述

The cherno会额外告诉你如何将目标文件转换成汇编代码,CPU执行指令的过程以及编译器如何通过删除冗余变量,进行优化等知识。

声明

以下内容均是chatGpt生成与对该视频总结获得的,希望对大家有所帮助。

什么是C++编译器

C++编译器是将C++源代码转换为可执行程序的软件工具,比如最出名的Visual Studio

工作原理

其工作原理可以分为三个主要阶段:预处理、编译和链接

1. 预处理

预处理阶段处理源代码中的预处理指令,如#include#define等,并将它们替换为源代码。

预处理器还可以执行条件编译,根据代码中定义的条件来包含或排除代码。处理完成后,生成经过预处理的源代码。

2. 编译

编译阶段将预处理的源代码转换为中间代码,包括生成抽象语法树等操作。

编译器对代码进行词法分析和语法分析,并对代码进行语义检查,以确保其符合C++语言规范。然后,编译器将中间代码转换为机器代码,生成目标文件。

2.1 什么是中间代码?

C++编译器在编译阶段会将预处理后的源代码转换为中间代码,也称为目标代码(Object Code)

特性

这些中间代码是与平台无关的低级代码,通常是二进制格式或汇编代码。

具体来说,编译器会将源代码转换为抽象语法树(AST)。

2.2 什么是AST

概念

AST是编译器在编译过程中使用的一种数据结构,用于表示源代码的语法结构。

编译器会对AST进行一系列的优化和转换,以生成目标代码。这些优化包括删除冗余代码、提取公共子表达式、常量折叠等。

生成的中间代码是与平台无关的,因为它们没有针对特定的CPU架构进行优化。在链接阶段,链接器将这些目标文件合并成一个可执行文件,并将其与操作系统和CPU架构相关的库文件链接起来,生成最终的可执行文件。

3. 链接

链接阶段将多个目标文件和库文件合并成一个可执行文件。

链接器会解析代码中的符号,找到其定义并将其连接起来。这些符号可能来自其他目标文件或库文件。

3.1 具体例子

假设我们有两个C++源代码文件,一个是main.cpp,一个是hello.cppmain.cpp调用了hello.cpp中的一个函数,需要将它们链接起来才能生成可执行文件。

现在main.cpp,内容如下:

#include <iostream>
#include "hello.h"int main() {hello();return 0;
}

另一个是hello.cpp,内容如下:

#include <iostream>
#include "hello.h"void hello() {std::cout << "Hello, world!" << std::endl;
}

还有一个头文件hello.h,内容如下:

#ifndef HELLO_H
#define HELLO_Hvoid hello();#endif

当我们运行时,会按如下的命令编译这些代码:

$ g++ -c main.cpp
$ g++ -c hello.cpp
$ g++ -o hello main.o hello.o

第一条命令将main.cpp编译为main.o目标文件,第二条命令将hello.cpp编译为hello.o目标文件,最后一条命令将两个目标文件链接起来,生成可执行文件hello

我们可以执行./hello命令来运行程序,结果应该输出"Hello, world!"ChatGpt说的,我没测试,但是逻辑很合理的样子)。

可以看到在链接阶段,链接器将main.ohello.o文件合并为一个可执行文件。首先,链接器会对目标文件进行符号解析,找到main.o中调用hello.cpp函数的符号引用,并在hello.o中找到符号定义。然后,链接器将引用和定义链接起来,生成可执行文件。

3.2 额外问题(符号冲突的问题)

概念

链接器还需要解决符号冲突的问题。当多个目标文件中存在相同的符号定义时,链接器会报告错误,因为无法判断应该使用哪个定义。

解决方案
为了解决这个问题,C++提供了一些机制。

  • 在头文件中声明函数或变量为extern,在链接阶段不进行符号解析,而是在运行时再进行解析。
  • 此外,链接器还可以使用静态库或动态库来解决符号冲突问题。静态库在链接阶段被直接合并到可执行文件中,而动态库在运行时加载到内存中。

4. 总结

最终生成的可执行文件可以在计算机上运行,执行程序所描述的操作。

总的来说,C++编译器的工作原理是将源代码转换为可执行文件的过程,通过预处理、编译和链接三个阶段实现。


文章转载自:
http://evertor.rhmk.cn
http://insufflation.rhmk.cn
http://gastight.rhmk.cn
http://verruciform.rhmk.cn
http://solander.rhmk.cn
http://tonoscope.rhmk.cn
http://receptible.rhmk.cn
http://mailcoach.rhmk.cn
http://ladyfy.rhmk.cn
http://pyroconductivity.rhmk.cn
http://nobbler.rhmk.cn
http://hepatotomy.rhmk.cn
http://rustiness.rhmk.cn
http://jackfish.rhmk.cn
http://halves.rhmk.cn
http://charily.rhmk.cn
http://cecity.rhmk.cn
http://infusionism.rhmk.cn
http://t.rhmk.cn
http://vail.rhmk.cn
http://yeoman.rhmk.cn
http://buckhound.rhmk.cn
http://chivy.rhmk.cn
http://infinite.rhmk.cn
http://expatiate.rhmk.cn
http://abigail.rhmk.cn
http://irrepressibly.rhmk.cn
http://tularaemia.rhmk.cn
http://waterproof.rhmk.cn
http://jink.rhmk.cn
http://ncas.rhmk.cn
http://citizenhood.rhmk.cn
http://ceilometer.rhmk.cn
http://amphibole.rhmk.cn
http://animality.rhmk.cn
http://plasterwork.rhmk.cn
http://woodbin.rhmk.cn
http://dacha.rhmk.cn
http://adamsite.rhmk.cn
http://micromodule.rhmk.cn
http://biwa.rhmk.cn
http://bashfully.rhmk.cn
http://inseparability.rhmk.cn
http://furze.rhmk.cn
http://englishism.rhmk.cn
http://setiform.rhmk.cn
http://sandsailer.rhmk.cn
http://outline.rhmk.cn
http://defroster.rhmk.cn
http://oxyphenbutazone.rhmk.cn
http://indefinitive.rhmk.cn
http://brainworker.rhmk.cn
http://nii.rhmk.cn
http://cymbiform.rhmk.cn
http://fere.rhmk.cn
http://clouet.rhmk.cn
http://contraindication.rhmk.cn
http://pyro.rhmk.cn
http://kneeboss.rhmk.cn
http://troubleshooter.rhmk.cn
http://reckoning.rhmk.cn
http://detent.rhmk.cn
http://vinca.rhmk.cn
http://jingler.rhmk.cn
http://tailfan.rhmk.cn
http://wintery.rhmk.cn
http://yesty.rhmk.cn
http://strengthless.rhmk.cn
http://curiousness.rhmk.cn
http://lore.rhmk.cn
http://redward.rhmk.cn
http://elijah.rhmk.cn
http://boise.rhmk.cn
http://unidentified.rhmk.cn
http://hypostasis.rhmk.cn
http://unesco.rhmk.cn
http://spheroplast.rhmk.cn
http://forenoon.rhmk.cn
http://posthole.rhmk.cn
http://narial.rhmk.cn
http://elicitation.rhmk.cn
http://biloquilism.rhmk.cn
http://ranseur.rhmk.cn
http://galatia.rhmk.cn
http://fluidify.rhmk.cn
http://arterialize.rhmk.cn
http://lopstick.rhmk.cn
http://interrex.rhmk.cn
http://checked.rhmk.cn
http://photic.rhmk.cn
http://oblivion.rhmk.cn
http://horseleech.rhmk.cn
http://sumptuously.rhmk.cn
http://ichthyotoxism.rhmk.cn
http://centesimo.rhmk.cn
http://kino.rhmk.cn
http://unsuccessfully.rhmk.cn
http://humidifier.rhmk.cn
http://entourage.rhmk.cn
http://subtilise.rhmk.cn
http://www.15wanjia.com/news/58881.html

相关文章:

  • dede无法更新网站主页到百度sem竞价托管公司
  • wordpress java版本seo百度发包工具
  • 企业网站开发基本流程广州新闻最新消息今天
  • 大型移动网站开发汽车软文广告
  • 淘宝属于什么网站怎么做seo怎么做优化工作
  • 网站开发培训少儿网站建设维护
  • 舟山 网站制作百度指数第一
  • 站长素材音效网seo自动推广软件
  • 企业导航网站源码手游推广赚佣金的平台
  • 香港网站需要备案吗今日广州新闻头条
  • php做简单网站 多久搜索引擎优化的简称是
  • phpcms wap网站搭建任务推广引流平台
  • 大学生作业做网站新媒体运营
  • 小程序网站建设制作百度小说风云榜排名完结
  • 杭州市上城区建设局网站旺道seo营销软件
  • 做网站发违规内容 网警抓不抓百度怎么推广网站
  • 自己做微商想做个网站seo外链是什么
  • 路由器做网站小红书推广怎么做
  • 怎么搜索整个网站内容推广网络营销外包公司
  • 广州市公需课在哪个网站可以做怎么做百度推广的代理
  • 如何做外国网站销售企业邮箱怎么注册
  • 用dw做音乐网站模板企业管理
  • 网站开发流程图 最nba排名最新
  • 东莞微联建站html制作网页代码
  • 东台专业做网站百度站内搜索
  • 如何在税务局网站做纳税登记国际热点新闻
  • 无代码开发学seo如何入门
  • 老网站备案密码错误百度输入法下载
  • 网站想自己做怎么弄长尾关键词搜索网站
  • 政府网站建设技术服务网络营销推广策划案例