首页

使用C++ Build Insights对模板代码进行性能分析  

C++中的模板编程 在C++程序中使用模板有时会导致很长的编译时间。C++ Build Insights可以提供一些工具,用来分析模板使用模式(template usage patterns)及其对编译时间的相关影响。 在本文中,我们将演示如何使用vcperf分析工具和C++ Build Insights SDK来理解和修复有问题的模板模式。我们通过一个案例研究证明了这些工具的实际使用,在该案例中...

关于位图画刷的其他两种用法  

位图画刷(是的,我没说错) 位图画刷通常是那些 8像素 * 8像素的单色图案,你可以在这些图案上进行重新创作,又或者使用一些你认为比较复杂的图案,例如犬牙花纹(houndstooth)。实际上,除了这些,还有一些其他的妙用值得尝试。 CreatePatternBrush这个API函数会接受一个旧的位图并基于这个位图创建一个画刷,即使这个位图的尺寸十分巨大,也同样如此。 这个位图将会自动平铺,因此,...

为什么内存空间分配总是以64K为边界?  

有时候你可能会有这样的疑惑:为什么页面大小是4K,而VirtualAlloc函数分配的内存是以64K(而不是4K)为边界呢? 事情还得从Alpha AXP处理器说起 在Alpha AXP处理器上,没有一条指令对应”加载一个32位的证书”这样的操作,取而代之地,实际上是加载两个16位的整数然后将它们合并成32位的。 所以,如果内存分配粒度小于64K,则一个需要重新定位的DLL...

一种技法:使用共享内存拷贝大型数据  

蝎子 共享内存(Shared Memory)不仅可以用来和其他进程共享内存数据,它还可以用来隐秘的共享只有你自己才知晓的数据。 举个栗子 下面我们来看一个简单的例子(我忽略了错误检查及各种资源释放代码,因为这个例子只是用来演示一些概念)。在这个例子中,我们演示了你可以同时地映射相同一块共享内存到两个不同的地方。因为被映射的共享内存是同一个,所以如果我们修改其中一个地址上的数据,另一个地址上的数据也...

Windows95显示系统内存的一个小技巧

为什么我的内存少了点? 在Windows 95的Beta版测试期间,当用户打开系统属性页面的时候,经常会看到显示的内存和实际安装的内存是不一致的:总是差那么一点点。人民不禁会发出疑问:为什么我的内存少了一点呢? 这是因为,Windows 95的系统属性里报告的是”对于Windows系统的可用内存”,在很多情况下,它都是和机器实际安装的内存有差异的。 两个例子 举个栗子,你的...

为什么不能在开始菜单上使用字母快捷键?

关于开始菜单的首字母快捷键 在开始菜单中,Windows系统会使用应用程序的第一个字母来作为打开目标应用程序的快捷键,这种设计方式是由Windows系统的内部实现所决定的,作为用户,甚至作为应用开发者来说,这个特性都是无法修改的。 如果你安装了10个微软的应用程序,则它们都会使用字母M作为每个应用程序的快捷键(微软的英文名称为Microsoft)。 说老实话,我也十分讨厌这个特性。导致的结果就是,...

资源管理器中的文件名的颜色在表达什么意思?

简而言之:蓝色表示此文件已被压缩,绿色表明此文件已被加密。 这只是一个具有代表性的例子,它代表了这样一类人的观点:”瞧瞧,这个功能很好实现的,应该很快可以做好吧。” 的确,这个功能不是很复杂,但是这会带来下面的副作用: “哈哈,我将会做一些你自己永远都没法理解的事情,除非有人特意告诉你。” 类似的小的改动要求我们还收到了很多。如果我们全部接收的话,你...

为什么高级选项对话框的每个勾选框后面会有ON和OFF?

因为这个时候Windows认为屏幕阅读器(又名”讲述人”)正在运行。 如果讲述人已启用并正在运行,则Windows会在每个高级对话框里的勾选框后面添加”ON”和”OFF”的的标识,这样讲述人组件就可以阅读勾选框的状态并传达给视障人士。 你在开发程序的时候,是否也考虑到了这一部分人群了呢?

为什么我总是得到假的WM_MOUSEMOVE消息?

为了把这件事情搞明白,我们需要了解一下WM_MOUSEMOVE这一消息的来源(它是如何产生的)。 仅仅是设置一个标志位 当鼠标被用户移动的时候,鼠标会向操作系统上报一个中断,操作系统会判断当前哪个线程应该接收这一鼠标移动消息,然后会在这个线程的硬件输入队列里设置一个标志,来通知线程:”嘿,用户刚刚移动了鼠标,得注意啦”。(其实,在这个时候,通常还会有其他事情发生,不过,我们...

微软开发者大会(Build 2020)将在线上举行

终于来了 微软开发者大会定于5月19日周二举行,它将持续48小时,并且,与以往不同的是,今年的开发者大会将全部在线上举行。本次会议对全球观众开放,观众无需支付任何费用。 这是第一次全面进行了数字化处理的大型技术会议,我们针对参会的虚拟观众的体验进行了全新的设计。 C++团队很高兴能参加此次盛会,我们希望你也可以参加进来。在这次会议上,我们将会演示我们的团队成员目前所做出的工作成果。我们在微软的合作...