首页

C++20特性观摩:Conditionally Trivial Special Member Functions  

老伙计们,又来新玩意儿了 C++标准委员会目前正在致力于添加一些新功能到语言中,以实现简化C++代码的战略目标。 让我们举其中的一个小例子:Conditionally Trivial Special Member Functions, 我们在Visual Studio 2019版本16.8中添加了对它的支持。 除非你深入地了解高性能库开发时候所面临的繁琐工作,否则它的好处并不是那么显而易见。 因此...

C++小坑一枚:new和deletee未配对使用的后果  

蝎子 在之前的文章中,我提到过,如果new和delete这两条指令没有准确地配对使用,则可能会造成一些麻烦,那么,今天就来详细说道说道。 网上有这样一篇文章《C++ Gotchas: Avoiding Common Problems in Coding and Design》,里面有一个掌节《Failure to Distinguish Scalar and Array Allocation》我建...

总结一下:VS2019中对C++20语言特性的支持  

有什么新东西? 我们的开发团队一直都在努力工作,尝试在MSVC工具集中实现C++20尽可能多的语言特性,在已发布的VS2019 v16.7和VS2019 v16.8中,我们取得了比较大的进展。今天,我们就来总结一下这两个大版本中对C++20的支持情况。 今天我们将特别关注MSVC编译器(cl.exe)中实现的C++20语言特性。有关STL相关的进展消息,我们会在Microsoft STL GitH...

VS2019新版本: 进一步提升构建速度  

天下武功,唯… Visual Studio 2019 v16.8 Preview 3.2 引入了针对构建过程的一系列优化。在这篇文章中,我们将会介绍The Coalition工作室在三种不同的版本的Visual Studio上编译这个大型游戏工程时的时间对比。 在这项测试中,他们不仅测量了整体的端到端编译时间,还进一步测量了预览版本中新添加的链接时间优化所带来的性能提升。 通过使用Vi...

字符串资源格式浅谈  

字符串资源 在Win32图形化编程中,资源的ID定义在资源文件中并可以被代码引用。 其中,字符串资源和其他资源类型有点不一样,也即:字符串资源是打包在一起的。在知识库中有一篇文章Q196774对字符串的格式进行了简单的介绍,那么今天,我们就用实际的代码来更加深入地理解字符串资源的格式。 在资源文件列出的字符串以16个条目进行分组。所以,第一个字符串组合包含了第0个字符串到第15个字符串,第二个字符...

一个潜在问题:内存分配操作中可能出现的整数溢出  

新的攻击向量 整数溢出正在逐渐成为一个新的安全攻击向量。 一个容易被开发者忽视的场景是在使用new[]进行内存分配的时候出现的整数溢出。 两个例子 考虑下面的代码,它可能会执行一个未经检查的隐式乘法操作。 如果你仔细研究一下上面代码生成的汇编代码的话,如下图所示: 请注意,在上面的汇编代码中,它并未检查与sizeof(int)的乘积是否溢出。别有用心者可以通过传递类似howmany = 0x4...

DllMain中可能出现的意外死锁  

潜在的死锁 DllMain函数执行的时候,Windows会为它创建一个独占的环境(锁),这是操作系统在使用它内部的锁机制的几种比较少见的情况之一。这也意味着,你必须十分小心那些导致DllMain函数中可能出现的死锁情况发生。 举个例子 加载器锁可以被任意需要访问加载到进程中的DLL列表的函数获取到,这其中包括像GetModuleHandle和GetModuleFileName之类的函数。如果你的D...

记得,不要在DllMain中做很复杂的操作  

关于DllMain 我想,现在大家应该也都知道了,我们不应该在DllMain中做什么有意义的事情。 下面我会讲述你不应该这样做的另一个理由。 有这样一种调用场景十分常见:加载了一个DLL但是不实际调用这个库导出的函数。例如,下面这个例子展示了客户是如何加载你的DLL的。 在上面的例子中,调用者只需要提取DLL的图标资源,如果在DLL中的DllMain中执行了一些耗时很久的工作,例如启动一个计时器...

Visual Studio C++模块快速入门  

是时候入门了 Visual Studio现在已经支持C++模块了。C++模块可以对代码进行合理的划分,加速工程构建过程并且可以和现有的代码进行无缝,并行地协调工作。 此次的预览版本仅支持在IDE中在基于MSBuild工程中使用C++模块。与此同时,MSVC工具集可以被任何类型的构建系统支持,所以基于CMake的工程在Visual Studio IDE中还尚未得到支持。我们会在此项特性得到完全支持后...

VS2019: 进一步新增了C++代码分析规则  

官宣 在Visual Studio v16.8 Preview 3中,我们添加了一些新的安全编码规则到C++ Code Analysis中,开发者可以借助这些规则来发现一些比较常见的编码错误,这些错误看起来会不起眼,但是由此引发的Bug却十分难以追踪。这些编码规则都来自于真实运行的软件产品,在微软,每个项目都会执行这些编码规则检查,以确保软代码满足安全性和标准一致性的要求。 在之前的文章中,我们已...