VC++ 和 Native .NET 编译器后端 C2 的更新介绍
来源:互联网 发布:杜兰特总得分最新数据 编辑:程序博客网 时间:2024/05/10 18:56
原文地址
大多数开发者对C2 不胜了解,但它确是 Windows 开发过程中至关重要的一部分。它扮演着Windows 平台上 Visual C++, .NET 本地编译型代码, 编译型 T-SQL, 和 Objective-C 的编译器后端的角色。
C++中的安全控制很难,这门语言天生就不太安全,因为可以操作内存,甚至有时候它只是因为一个野指针就可以造成很大的麻烦。为了避免这种危险的发生,微软为他们的编译器加入了一个新的编译开关叫做 /Guard 来改变虚函数的调用方式。这种改动涉及到编译器,链接器,和操作系统,所以这个开关只在 Windows 8.1 及以上的版本起作用。
尽管CPU的性能逐年提升,但是这种原始时钟频率导致的性能提升并没有得到重视。所以C++需要提高对 resumable functions 的 支持,就是我们常说的协程。恢复和挂起的开销等价于一个普通函数调用,这就有允许我们以零开销的方式抽象现有的异步功能。
控制流矢量化。如果C++的循环里面包含简单的if语句,编译器就可以加速循环的执行。最近的测试显示程序性能提升了229%到600%。
像这样的性能提升会伴随着构建时间的增加。但是随着整个应用程序的增量编译,实际的构建时间反而减少了几个百分点甚至数量级。这种实现是通过缓存VC++在编译过程中产生的AST(抽象语法树)从而反馈到整个编译流水线中来达成的。
你可以使用 /debug:fastlink 开关来切换到新的PDB格式 来进一步提升编译速度。生成PDB文件为的是做调试,这个是构建中最费时的过程。在新的PDB格式下,编译器就不用每次都重新生成整个PDB文件,而只要查询和修改表就可以了。
.NET 开发人员可能对这些不太关心,但是在 Windows 10 / 统一应用模型下,所有的 .NET 应用在被发布到用户手中时都被编译成了本地机器码。所有的这一切都是通过在流水线上把 IL 中间代码 传递到 VC++ 后端 编译器C2上来完成的。
C2 也被用来在Windows上编译 Objective-C 。想看更多与此相关的主题,请看接下来的文章:用Visual Studio把 Objective-C 编译成 C++ 或者观看第九频道视频 Compiling Objective-C Using the Visual Studio 2015 C++ Code Generation that Builds Windows, SQL, .Net, and Office.
- VC++ 和 Native .NET 编译器后端 C2 的更新介绍
- 什么是编译器里的前端和后端
- VC编译器参数介绍
- VC编译器参数介绍
- gcc编译器---前端和后端
- HotSpot C2编译器
- VC编译器和C#编译器的速度差异很大!!!
- 发现VC编译器和gcc编译器的一点不同
- 转来的 Direct X 介绍及其在VC++6.0和VC.NET中的设置 .
- 关于c++编译器和IDE的介绍
- 关于c++编译器和IDE的介绍
- 编译器-gcc的介绍和操作
- idea前后端联调 更新后端jar包可能出现的问题和解决方法
- VC编译器的问题
- gcc和vc编译器区别
- gcc和vc编译器在语法上的比较
- 【转】gcc和vc编译器在语法上的比较
- VC编译器中尖括号和引号的区别
- 电路定理
- 【重构机房】 设计数据库
- 一个Android菜鸟“面霸”的面试经历,如何少走弯路多加薪!
- 进阶_计时器(Handler+TimerTask实现)_150503
- 控制领域主要学术期刊 Major Journals in Control Field
- VC++ 和 Native .NET 编译器后端 C2 的更新介绍
- 黑马程序员_Java语言_面向对象_多态
- 去哪儿网校园招聘java开发面试回忆
- 素数判定Miller_Rabin 算法详解
- Remove Duplicates from Sorted List
- BZOJ 4031: [HEOI2015]小Z的房间
- c++之超越c的语法04-变量作用域
- 病毒的分类和命名规则
- Spring 注解 AOP 出现错误::0 can't find referenced pointcut XXX 的原因