VS2019 v16.9 预览版3:MSVC后端更新汇总
新特性,优化和改进
在Visual Studio 2019 v16.9 Preview 3中,我们持续对C++编译器后端添加了一系列的新特性,以及对编译性能,安全性进行了大量的优化。下面我们列出一份简短的优化列表,以享读者。
总之,Microsoft开发团队是不会忘记咱们广大C++猿友的,放心哈。
Address Sanitizer
VS2019 IDE通过集成ASan扩展(vcasan.lib)支持ASan报告的异常信息,在VS集成开发环境中,我们收集了所有ASan组件报告的所有异常信息。
当使用/fsanitize=地址来抛出一个异常的时候,vcasan库,像其他ASan库一样,可以被自动发现。
编译器和链接器如果发现你启用了ASan但是没有输出调试信息的时候,会给出输出调试信息的建议。
我们非常高兴能在最新的预览版中和广大开发者分享这些用户模式的优化和改进。
关于ASan更多的信息,我们会16.9正式版发布的时候,提供一份完整的帮助文档。
技术方面的改进包括了如下几点:
> 扩展的RtlAllocateHeap支持,并解决了RtlCreateHeap和RtlAllocateHeap在对执行内存进行拦截时的兼容性问题。
> 添加了对GlobalAlloc和LocalAlloc可移动内存的ASan拦截。
> 更新了拦截失败时的处理方法,另外会检查系统环境变量ASAN_WIN_CONTINUE_ON_INTERCEPTION_FAILURE的值,以在拦截失败的情况下继续执行。
> 更新了错误信息,以更加突出地显示有关shadow memory拦截的错误。
OpenMP targeting the LLVM runtime
我们增加了对LLVM版本的OpenMP运行时的支持。通过使用新的编译器开关/openmp:llvm来代替之前的/openmp开关,以实现面向新的LLVM运行时环境。
另外除了所有通过/openmp的得到支持的所有OpenMP特性之外,/openmp:llvm开关还将添加对/progma omp代码区段和并行循环中的无符号索引变量的支持。
有一点需要注意的是,/openmp:llvm开关当前只在amd64目标平台可用,并且只是一项实验性的特性。
其他新特性和改进
> 优化了对coroutine的调试支持。
> 对amd64平台的pre-coloring进行了维护(jump-threading)
我们修复了一个代码生成阶段的Bug:当编译amd64版本的函数时,如果这个函数返回一个大型对象且开启了/O2时,编译器生成的代码不正确。
> 交换了loop fusion和vectorization的顺序。
优化了循环的性能,以在更多的场景中应用loop fusion。
> 通过使用reg-mem的一个变形x86指令集,以移除不必要的内存负载。
> 修复了一个在LTCG开关下的/OPT:REF的Bug。
具体来说,就是当一个被引用的函数只是通过数据(如,虚函数表)被引用时,可能会在LTCG开关下的/OPT:REF情况下被意外的移除。
> 添加了C++模块的增量链接支持。
> 添加了对Intel Keylocker和User Interrupt instructions的支持,同时对加入到VC 工具集中的原语予以支持,例如编译器,MASM和MSDIS等。
总结
C++后端总是在辛勤开发的时候,默默在后台做它应该做的事情,它一不求名,而不求利,只求你的代码能正确的工作。
我得给你点个老赞。
最后
Microsoft Visual C++团队的博客是我非常喜欢的博客之一,里面有很多关于Visual C++的知识和最新开发进展。大浪淘沙,如果你对Visual C++这门古老的技术还是那么感兴趣,则可以经常去他们那(或者我这)逛逛。
本文来自:《MSVC Backend Updates in Visual Studio 2019 version 16.9 Preview 3》
- 下一篇: Visual Studio对CMake工程的ARM64平台的支持
- 上一篇: 谈谈任务管理器的精简模式
相关推荐
- Visual Studio: 关于内联的决策过程
- Posted on 08月04日
- 关于WinMain函数的第二个参数解释
- Posted on 04月08日
- 界面设计一二事
- Posted on 03月01日
- 关于Tweak UI 2.10的更多问题与解答
- Posted on 11月03日
评论已关闭。