﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-Heath's Blog-随笔分类-Studying</title><link>http://www.cppblog.com/heath/category/8908.html</link><description>There is no end, it is just the beginning! - A Game Developer's Notes</description><language>zh-cn</language><lastBuildDate>Wed, 20 Jun 2012 11:04:55 GMT</lastBuildDate><pubDate>Wed, 20 Jun 2012 11:04:55 GMT</pubDate><ttl>60</ttl><item><title>从CPU超频中学些硬件知识</title><link>http://www.cppblog.com/heath/archive/2012/06/10/178365.html</link><dc:creator>Heath</dc:creator><author>Heath</author><pubDate>Sun, 10 Jun 2012 15:16:00 GMT</pubDate><guid>http://www.cppblog.com/heath/archive/2012/06/10/178365.html</guid><wfw:comment>http://www.cppblog.com/heath/comments/178365.html</wfw:comment><comments>http://www.cppblog.com/heath/archive/2012/06/10/178365.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/heath/comments/commentRss/178365.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/heath/services/trackbacks/178365.html</trackback:ping><description><![CDATA[<p><strong><font size="4">一、前言</font></strong> 
<p>&nbsp;&nbsp;&nbsp;&nbsp; 从大学到现在配过两台PC，第一台Celeron的机器从大二用到研究生毕业，之后开始用笔记本。第二台PC是09年入手的，那阵子玩超频，但心浮气躁，胡乱尝试一下就浅尝辄止了，连一些基本原理都没有弄清楚。最近刚搞好新房安顿下来，有了自己的工作间，在重新组装PC和设置BIOS的时候又想超频了，但这次我期望做到知其所以然，故在网上查阅了一些资料恶补了一下硬件知识，权当作学习笔记。由于网络上关于硬件（特别是内存部分）知识很杂，仅以自己认为比较靠谱的内容为依据，如有不准确之处，欢迎指正。由于使用的是Intel CPU，本文限于Intel架构，且不适用I系列架构。 
<p><a href="http://www.cppblog.com/images/cppblog_com/heath/Windows-Live-Writer/18e4652fc073_1450A/500px-Motherboard_diagram.svg_2.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="500px-Motherboard_diagram.svg" border="0" alt="500px-Motherboard_diagram.svg" src="http://www.cppblog.com/images/cppblog_com/heath/Windows-Live-Writer/18e4652fc073_1450A/500px-Motherboard_diagram.svg_thumb.png" width="500" height="770" /></a> 
<p align="center">总线概览 
<p><strong><font size="4">二、术语</font></strong> 
<p><strong><br /></strong>
<p><strong>主板芯片组：</strong>北桥芯片和南桥芯片。 
<p><strong>北桥（Northbridge）：</strong>PC主板芯片组其中之一，设计用来处理高速信号，与CPU、内存、AGP/PCIE、南桥芯片进行通信。 
<p>南桥（Southbridge）：PC主板芯片组其中之一，设计用来处理低俗信号，通过北桥和CPU通信，与大多数I/O控制设备接口，如PCI控制器、ATA控制器、USB控制器、网络控制器、音效控制器。各个芯片厂商对南桥芯片的命名有所不同，Intel将其称为ICH，nVidia称为MCP，ATI称为IXP/SB。 
<p><strong>前端总线（FSB, Front Side Bus）：</strong>指CPU与北桥芯片之间的数据传输通道。 
<p><strong>锁相环（PLL, Phase-Locked Loop）：</strong>一个闭环的反馈控制系统，它可以使PLL的输出可以与一个参考信号保持固定的相位关系。 
<p><strong>时钟频率：</strong>确切点是晶振频率，与锁相环电路配合使用为PC提供定时信号，通过倍频/分频产生不同频率的基准信号，用以同步系统的每一步操作。对于CPU主频，它是由晶振提供的频率通过CPU内部的PLL电路倍频而来。 
<p><strong>CPU外频：</strong>系统总线的工作频率，体现了CPU与芯片组之间的总线速度。 
<p><strong>前端总线频率：</strong>CPU与北桥芯片之间的总线工作频率。之所以将CPU外频与前端总线频率区分开来，是因为Intel在Pentium 4中加入了Quad Pumped Bus架构，使得系统总线在一个时钟周期内传输4次数据，也就相当于工作频率为CPU外频的4倍。 
<p><strong>CPU倍频：</strong>为倍频系数的简称，是指CPU主频与CPU外频之间的相对比例关系。在PC发展初期，由于CPU速度不高，大部分元件时钟均保持同步，直到80486时代，在CPU制程持续进步下，CPU的速度也加速增长，当时由于其他外部元件受电气结构所限，无法跟进成长，因此Intel首次在CPU中加入了倍频设计。它的作用是使系统总线工作在相对较低的频率上，而CPU速度可以通过倍频来提升。 
<p><strong>双倍数据速率（DDR, Double Data Rate）：</strong>使SDRAM在一个时钟周期内进行两次数据传输的技术，具体地说它在信号的上升沿和下降沿传输数据一次，数据传输率是之前仅利用上升沿进行数据传输的SDRAM的两倍。 
<p><strong>内存频率：</strong>分为核心频率(Internal rate)和I/O总线频率(Bus clock)。每条内存都是由内存芯片组成，内存芯片的频率就是核心频率。I/O总线频率是指北桥与内存之间的总线频率。通常内存条标称的实际上是最大数据传输频率：I/O总线频率X2。其实，从DDR到DDR3，其内存颗粒的频率没有怎么提升，提升的是总线频率。JEDEC制定的DDR三代参数对照如下表所示： 
<p><a href="http://www.cppblog.com/images/cppblog_com/heath/Windows-Live-Writer/18e4652fc073_1450A/Image(11)_2.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="Image(11)" border="0" alt="Image(11)" src="http://www.cppblog.com/images/cppblog_com/heath/Windows-Live-Writer/18e4652fc073_1450A/Image(11)_thumb.png" width="644" height="140" /></a> 
<p><strong>双通道：</strong>就是在北桥芯片里设计两个内存控制器，这两个内存控制器可相互独立工作，每个控制器控制一个内存通道。在这两个内存通道上CPU可分别寻址、读取数据，从而使内存的带宽增加一倍，数据存取速度也相应增加一倍（理论上）。流行的双通道内存构架是由两个64bit DDR内存控制器构筑而成的，其带宽可达128bit。因为双通道体系的两个内存控制器是独立的、具备互补性的智能内存控制器，因此二者能实现彼此间零等待时间，同时运作。两个内存控制器的这种互补&#8220;天性&#8221;可让有效等待时间缩减50%，从而使内存的带宽翻倍。双通道内存技术是解决CPU总线带宽与内存带宽的矛盾的低价、高性能的方案。 
<p>&nbsp; 
<p><strong><font size="4">三、原理</font></strong> 
<p align="center"><em><font size="4">CPU主频=外频&#215;倍频</font></em></p><em>
<p><br /></p></em>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 从公式可以看出，要提升CPU主频可以从提高外频和倍频两方面着手。然而在实际操作过程中，两者都会受CPU本身及外部硬件（主要是主板）体质的限制，如：锁倍频、主板FSB Frequency上限。 
<p>1）提高外频 
<p>&nbsp;&nbsp;&nbsp;&nbsp; 因为CPU外频的设置直接影响系统总线工作频率，所以通过提升外频和搭配合适的内存，可以在主板支持的前端总线频率上限内有效提升系统的整体性能。之所以要搭配合适的内存，是因为前端总线频率提高，最大的受影响者就是内存，所以内存能够支持的最高工作频率也需要考虑。虽然GPU数据也要通过前端总线由CPU经过北桥到达显卡，但是在仅针对CPU超频的情况下，一般会将CPU与显卡之间通信的频率锁定在100MHz。举个例子：有一块前端总线上限频率为1600MHz的主板，假如搭配一块上限为1600MT/s的DDRIII内存，1:2分频比的前提下，需要将CPU的外频提升到接近400MHz，整个系统才会比较平衡。 
<p>2）提高倍频 
<p>&nbsp;&nbsp;&nbsp;&nbsp; 通过倍频的定义，可以看出，在外频一定的情况下，提高倍频，只能单纯地提高CPU工作频率。虽然，CPU的计算能力除了跟工作频率有关外，还与硬件架构和指令集有关，成倍提高工作频率肯定不等于成倍提高了计算能力，但可以肯定的是频率提高肯定会在一定程度上提高计算能力。 
<p><strong><font size="4">四、实作</font></strong> 
<p><a href="http://www.cppblog.com/images/cppblog_com/heath/Windows-Live-Writer/18e4652fc073_1450A/CaptureMB.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="CaptureMB" border="0" alt="CaptureMB" src="http://www.cppblog.com/images/cppblog_com/heath/Windows-Live-Writer/18e4652fc073_1450A/CaptureMB_thumb.png" width="573" height="118" /></a> 
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<p>&nbsp;&nbsp;&nbsp; 五电容版E5200具有很强的超频空间，在倍频定在X8的情况下，1.2V便可以轻松上370MHz。主板在不超频情况下FSB就已经支持1600MHz了，Corsair在使用XMP时支持1600，在整体考量（散热、CPU寿命）后决定将CPU外频定在350MHz、倍频设为x10，这样FSB可工作在1400MHz，内存按照 1:2分频比I/O总线工作在700MHz下（数据传输频率为1400MT/s）。BIOS设置如下： 
<p><a href="http://www.cppblog.com/images/cppblog_com/heath/Windows-Live-Writer/18e4652fc073_1450A/IMG_0602.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="IMG_0602" border="0" alt="IMG_0602" src="http://www.cppblog.com/images/cppblog_com/heath/Windows-Live-Writer/18e4652fc073_1450A/IMG_0602_thumb.jpg" width="640" height="478" /></a> 
<p>内存CL、tRCD等值让其自动读取SPD配置。 
<p><a href="http://www.cppblog.com/images/cppblog_com/heath/Windows-Live-Writer/18e4652fc073_1450A/IMG_0604.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="IMG_0604" border="0" alt="IMG_0604" src="http://www.cppblog.com/images/cppblog_com/heath/Windows-Live-Writer/18e4652fc073_1450A/IMG_0604_thumb.jpg" width="640" height="478" /></a> 
<p align="center"><a href="http://www.cppblog.com/images/cppblog_com/heath/Windows-Live-Writer/18e4652fc073_1450A/Capture.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Capture" border="0" alt="Capture" src="http://www.cppblog.com/images/cppblog_com/heath/Windows-Live-Writer/18e4652fc073_1450A/Capture_thumb.png" width="496" height="480" /></a><a href="http://www.cppblog.com/images/cppblog_com/heath/Windows-Live-Writer/18e4652fc073_1450A/CaptureMem.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="CaptureMem" border="0" alt="CaptureMem" src="http://www.cppblog.com/images/cppblog_com/heath/Windows-Live-Writer/18e4652fc073_1450A/CaptureMem_thumb.png" width="499" height="480" /></a></p><strong>
<p><br /></p></strong>
<p><strong>参考：</strong> 
<p><strong><br /></strong>
<p>[1] 前端总线 <a href="http://zh.wikipedia.org/wiki/%E5%89%8D%E7%AB%AF%E6%80%BB%E7%BA%BF">http://zh.wikipedia.org/wiki/%E5%89%8D%E7%AB%AF%E6%80%BB%E7%BA%BF</a> 
<p>[2] 晶振及其选用指南 <a href="http://www.naiteli.com.cn/Info/Detail_50139_7547.html">http://www.naiteli.com.cn/Info/Detail_50139_7547.html</a> 
<p>[3] 倍频 <a href="http://baike.baidu.com/view/25647.htm">http://baike.baidu.com/view/25647.htm</a> 
<p>[4] DDR SDRAM <a href="http://en.wikipedia.org/wiki/DDR_SDRAM">http://en.wikipedia.org/wiki/DDR_SDRAM</a> 
<p>[5] DDR2 SDRAM <a href="http://en.wikipedia.org/wiki/DDR2_SDRAM">http://en.wikipedia.org/wiki/DDR2_SDRAM</a> 
<p>[6] DDR3 SDRAM <a href="http://en.wikipedia.org/wiki/DDR3_SDRAM">http://en.wikipedia.org/wiki/DDR3_SDRAM</a> 
<p>[7] 五电容E5200 <a href="http://tech.163.com/digi/09/0316/08/54H0RJNT001618J7.html">http://tech.163.com/digi/09/0316/08/54H0RJNT001618J7.html</a> </p><img src ="http://www.cppblog.com/heath/aggbug/178365.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/heath/" target="_blank">Heath</a> 2012-06-10 23:16 <a href="http://www.cppblog.com/heath/archive/2012/06/10/178365.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>实现一个以字符串为Key大小写不敏感的Hash Map</title><link>http://www.cppblog.com/heath/archive/2011/07/13/150906.html</link><dc:creator>Heath</dc:creator><author>Heath</author><pubDate>Wed, 13 Jul 2011 15:36:00 GMT</pubDate><guid>http://www.cppblog.com/heath/archive/2011/07/13/150906.html</guid><wfw:comment>http://www.cppblog.com/heath/comments/150906.html</wfw:comment><comments>http://www.cppblog.com/heath/archive/2011/07/13/150906.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/heath/comments/commentRss/150906.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/heath/services/trackbacks/150906.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp; Hash Map有两个关键方法：哈希值计算方法和比较方法。以STLPort为例，通过Hash Map的模版定义可以看出，其缺省的哈希Functor是hash，比较functor为equal_to：</p> <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:4eae06a8-1ba3-4127-b9ef-add2254f5ac4" class="wlWriterEditableSmartContent"> <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"> <div style="background: #ddd; max-height: 300px; overflow: auto"> <ol start="1" style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;"> <li><span style="color:#0000ff">template</span> &lt;<span style="color:#0000ff">class</span> <span style="color:#010001">_Key</span>, <span style="color:#0000ff">class</span> <span style="color:#010001">_Tp</span>, <span style="color:#010001">_STLP_DFL_TMPL_PARAM</span>(<span style="color:#010001">_HashFcn</span>,<span style="color:#010001">hash</span>&lt;<span style="color:#010001">_Key</span>&gt;),</li> <li style="background: #f3f3f3">          <span style="color:#010001">_STLP_DFL_TMPL_PARAM</span>(<span style="color:#010001">_EqualKey</span>,<span style="color:#010001">equal_to</span>&lt;<span style="color:#010001">_Key</span>&gt;),</li> <li>          <span style="color:#010001">_STLP_DEFAULT_PAIR_ALLOCATOR_SELECT</span>(<span style="color:#010001">_STLP_CONST</span> <span style="color:#010001">_Key</span>, <span style="color:#010001">_Tp</span>) &gt;</li> <li style="background: #f3f3f3"><span style="color:#0000ff">class</span> <span style="color:#010001">hash_map</span></li> </ol> </div> </div> </div> <p>&nbsp;&nbsp;&nbsp; 在_hash_fun.h中有针对各种类型的哈希值计算特化版本，下面仅摘录针对C字符串的代码：</p> <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:6cfec1ef-9640-4f1e-b059-60456851b718" class="wlWriterEditableSmartContent"> <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"> <div style="background: #ddd; max-height: 500px; overflow: auto"> <ol start="1" style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;"> <li><span style="color:#0000ff">inline</span> <span style="color:#010001">size_t</span> <span style="color:#010001">__stl_hash_string</span>(<span style="color:#0000ff">const</span> <span style="color:#0000ff">char</span>* <span style="color:#010001">__s</span>) {</li> <li style="background: #f3f3f3">  <span style="color:#010001">_STLP_FIX_LITERAL_BUG</span>(<span style="color:#010001">__s</span>)</li> <li>  <span style="color:#0000ff">unsigned</span> <span style="color:#0000ff">long</span> <span style="color:#010001">__h</span> = 0;</li> <li style="background: #f3f3f3">  <span style="color:#0000ff">for</span> ( ; *<span style="color:#010001">__s</span>; ++<span style="color:#010001">__s</span>)</li> <li>    <span style="color:#010001">__h</span> = 5*<span style="color:#010001">__h</span> + *<span style="color:#010001">__s</span>;</li> <li style="background: #f3f3f3">&nbsp;</li> <li>  <span style="color:#0000ff">return</span> <span style="color:#010001">size_t</span>(<span style="color:#010001">__h</span>);</li> <li style="background: #f3f3f3">}</li> <li>&nbsp;</li> <li style="background: #f3f3f3"><span style="color:#010001">_STLP_MOVE_TO_STD_NAMESPACE</span></li> <li>&nbsp;</li> <li style="background: #f3f3f3"><span style="color:#010001">_STLP_TEMPLATE_NULL</span></li> <li><span style="color:#0000ff">struct</span> <span style="color:#010001">hash</span>&lt;<span style="color:#0000ff">char</span>*&gt; {</li> <li style="background: #f3f3f3">  <span style="color:#010001">size_t</span> <span style="color:#0000ff">operator</span>()(<span style="color:#0000ff">const</span> <span style="color:#0000ff">char</span>* <span style="color:#010001">__s</span>) <span style="color:#0000ff">const</span> {</li> <li>    <span style="color:#010001">_STLP_FIX_LITERAL_BUG</span>(<span style="color:#010001">__s</span>)</li> <li style="background: #f3f3f3">    <span style="color:#0000ff">return</span> <span style="color:#010001">_STLP_PRIV</span> <span style="color:#010001">__stl_hash_string</span>(<span style="color:#010001">__s</span>);</li> <li>  }</li> <li style="background: #f3f3f3">};</li> <li>&nbsp;</li> <li style="background: #f3f3f3"><span style="color:#010001">_STLP_TEMPLATE_NULL</span></li> <li><span style="color:#0000ff">struct</span> <span style="color:#010001">hash</span>&lt;<span style="color:#0000ff">const</span> <span style="color:#0000ff">char</span>*&gt; {</li> <li style="background: #f3f3f3">  <span style="color:#010001">size_t</span> <span style="color:#0000ff">operator</span>()(<span style="color:#0000ff">const</span> <span style="color:#0000ff">char</span>* <span style="color:#010001">__s</span>) <span style="color:#0000ff">const</span> {</li> <li>    <span style="color:#010001">_STLP_FIX_LITERAL_BUG</span>(<span style="color:#010001">__s</span>)</li> <li style="background: #f3f3f3">    <span style="color:#0000ff">return</span> <span style="color:#010001">_STLP_PRIV</span> <span style="color:#010001">__stl_hash_string</span>(<span style="color:#010001">__s</span>);</li> <li>  }</li> <li style="background: #f3f3f3">};</li> </ol> </div> </div> </div> <p>&nbsp;&nbsp;&nbsp; __stl_hash_string实现了一个简单的哈希算法，因为算法中使用了字符的ASCII码，为了达到大小写不敏感的目的，可将每个字符转换成小写/大写来计算。对于hash functor，我们也需要一个string的特化版。</p> <p>&nbsp;&nbsp;&nbsp; 在_function_base.h中定义了equal_to functor：</p> <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:6c6a9c7b-a88e-49e4-8166-78deea0aa1d4" class="wlWriterEditableSmartContent"> <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"> <div style="background: #ddd; max-height: 300px; overflow: auto"> <ol start="1" style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;"> <li><span style="color:#0000ff">template</span> &lt;<span style="color:#0000ff">class</span> <span style="color:#010001">_Arg1</span>, <span style="color:#0000ff">class</span> <span style="color:#010001">_Arg2</span>, <span style="color:#0000ff">class</span> <span style="color:#010001">_Result</span>&gt;</li> <li style="background: #f3f3f3"><span style="color:#0000ff">struct</span> <span style="color:#010001">binary_function</span> {</li> <li>  <span style="color:#0000ff">typedef</span> <span style="color:#010001">_Arg1</span> <span style="color:#010001">first_argument_type</span>;</li> <li style="background: #f3f3f3">  <span style="color:#0000ff">typedef</span> <span style="color:#010001">_Arg2</span> <span style="color:#010001">second_argument_type</span>;</li> <li>  <span style="color:#0000ff">typedef</span> <span style="color:#010001">_Result</span> <span style="color:#010001">result_type</span>;</li> <li style="background: #f3f3f3"><span style="color:#0000ff">#if</span> !<span style="color:#0000ff">defined</span> (<span style="color:#010001">__BORLANDC__</span>) || (<span style="color:#010001">__BORLANDC__</span> &lt; 0x580)</li> <li><span style="color:#0000ff">protected</span>:</li> <li style="background: #f3f3f3">  <span style="color:#008000">/* See unary_function comment. */</span></li> <li>  ~<span style="color:#010001">binary_function</span>() {}</li> <li style="background: #f3f3f3"><span style="color:#0000ff">#endif</span></li> <li>};</li> <li style="background: #f3f3f3">&nbsp;</li> <li><span style="color:#0000ff">template</span> &lt;<span style="color:#0000ff">class</span> <span style="color:#010001">_Tp</span>&gt;</li> <li style="background: #f3f3f3"><span style="color:#0000ff">struct</span> <span style="color:#010001">equal_to</span> : <span style="color:#0000ff">public</span> <span style="color:#010001">binary_function</span>&lt;<span style="color:#010001">_Tp</span>, <span style="color:#010001">_Tp</span>, <span style="color:#0000ff">bool</span>&gt; {</li> <li>  <span style="color:#0000ff">bool</span> <span style="color:#0000ff">operator</span>()(<span style="color:#0000ff">const</span> <span style="color:#010001">_Tp</span>&amp; <span style="color:#010001">__x</span>, <span style="color:#0000ff">const</span> <span style="color:#010001">_Tp</span>&amp; <span style="color:#010001">__y</span>) <span style="color:#0000ff">const</span> { <span style="color:#0000ff">return</span> <span style="color:#010001">__x</span> == <span style="color:#010001">__y</span>; }</li> <li style="background: #f3f3f3">};</li> </ol> </div> </div> </div> <p>&nbsp;&nbsp;&nbsp; 通过定制一个string版本的equal_to，使用stricmp进行字符串比较。下面列出实现及测试代码：</p> <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:09167350-9b87-41ad-b212-1d98081ecfb6" class="wlWriterEditableSmartContent"> <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"> <div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px">Test Codes</div> <div style="background: #ddd; max-height: 500px; overflow: auto"> <ol start="1" style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;"> <li><span style="color:#0000ff">#include</span> <span style="color:#a31515">&lt;hash_map&gt;</span></li> <li style="background: #f3f3f3"><span style="color:#0000ff">#include</span> <span style="color:#a31515">&lt;string&gt;</span></li> <li><span style="color:#0000ff">#include</span> <span style="color:#a31515">&lt;algorithm&gt;</span></li> <li style="background: #f3f3f3"><span style="color:#0000ff">#include</span> <span style="color:#a31515">&lt;cctype&gt;</span></li> <li>&nbsp;</li> <li style="background: #f3f3f3"><span style="color:#0000ff">inline</span> <span style="color:#010001">size_t</span> <span style="color:#010001">__stl_hash_string</span>(<span style="color:#0000ff">const</span> <span style="color:#0000ff">char</span>* <span style="color:#010001">__s</span>) </li> <li>{</li> <li style="background: #f3f3f3">    <span style="color:#0000ff">unsigned</span> <span style="color:#0000ff">long</span> <span style="color:#010001">__h</span> = 0;</li> <li>    <span style="color:#0000ff">for</span> ( ; *<span style="color:#010001">__s</span>; ++<span style="color:#010001">__s</span>)</li> <li style="background: #f3f3f3">        <span style="color:#010001">__h</span> = 5*<span style="color:#010001">__h</span> + <span style="color:#010001">tolower</span>(*<span style="color:#010001">__s</span>);</li> <li>&nbsp;</li> <li style="background: #f3f3f3">    <span style="color:#0000ff">return</span> <span style="color:#010001">size_t</span>(<span style="color:#010001">__h</span>);</li> <li>}</li> <li style="background: #f3f3f3">&nbsp;</li> <li><span style="color:#0000ff">template</span>&lt;&gt;</li> <li style="background: #f3f3f3"><span style="color:#0000ff">struct</span> <span style="color:#010001">stlport</span>::<span style="color:#010001">hash</span>&lt;<span style="color:#010001">stlport</span>::<span style="color:#010001">string</span>&gt;</li> <li>{</li> <li style="background: #f3f3f3">    <span style="color:#010001">size_t</span> <span style="color:#0000ff">operator</span>()(<span style="color:#0000ff">const</span> <span style="color:#010001">stlport</span>::<span style="color:#010001">string</span>&amp; <span style="color:#010001">__s</span>) <span style="color:#0000ff">const</span></li> <li>    {</li> <li style="background: #f3f3f3">        <span style="color:#0000ff">return</span> <span style="color:#010001">__stl_hash_string</span>(<span style="color:#010001">__s</span>.<span style="color:#010001">c_str</span>());</li> <li>    }</li> <li style="background: #f3f3f3">};</li> <li>&nbsp;</li> <li style="background: #f3f3f3"><span style="color:#0000ff">template</span>&lt;&gt;</li> <li><span style="color:#0000ff">struct</span> <span style="color:#010001">stlport</span>::<span style="color:#010001">equal_to</span>&lt;<span style="color:#010001">stlport</span>::<span style="color:#010001">string</span>&gt; </li> <li style="background: #f3f3f3">    : <span style="color:#0000ff">public</span> <span style="color:#010001">stlport</span>::<span style="color:#010001">binary_function</span>&lt;<span style="color:#010001">stlport</span>::<span style="color:#010001">string</span> , <span style="color:#010001">stlport</span>::<span style="color:#010001">string</span> , <span style="color:#0000ff">bool</span>&gt;</li> <li>{</li> <li style="background: #f3f3f3">    <span style="color:#0000ff">bool</span> <span style="color:#0000ff">operator</span>()(<span style="color:#0000ff">const</span> <span style="color:#010001">stlport</span>::<span style="color:#010001">string</span>&amp; <span style="color:#010001">__x</span>, <span style="color:#0000ff">const</span> <span style="color:#010001">stlport</span>::<span style="color:#010001">string</span>&amp; <span style="color:#010001">__y</span>) <span style="color:#0000ff">const</span> </li> <li>    { </li> <li style="background: #f3f3f3">        <span style="color:#0000ff">return</span> !<span style="color:#010001">_stricmp</span>(<span style="color:#010001">__x</span>.<span style="color:#010001">c_str</span>() , <span style="color:#010001">__y</span>.<span style="color:#010001">c_str</span>()); </li> <li>    }</li> <li style="background: #f3f3f3">};</li> <li>&nbsp;</li> <li style="background: #f3f3f3"><span style="color:#0000ff">int</span> <span style="color:#010001">_tmain</span>(<span style="color:#0000ff">int</span> <span style="color:#010001">argc</span>, <span style="color:#010001">_TCHAR</span>* <span style="color:#010001">argv</span>[])</li> <li>{</li> <li style="background: #f3f3f3">    <span style="color:#010001">stlport</span>::<span style="color:#010001">hash_map</span>&lt;<span style="color:#010001">stlport</span>::<span style="color:#010001">string</span> , <span style="color:#0000ff">int</span>&gt; <span style="color:#010001">map</span>;</li> <li>&nbsp;</li> <li style="background: #f3f3f3">    <span style="color:#010001">map</span>.<span style="color:#010001">insert</span>(<span style="color:#010001">stlport</span>::<span style="color:#010001">make_pair</span>(<span style="color:#a31515">&quot;Test&quot;</span> , 123));</li> <li>&nbsp;</li> <li style="background: #f3f3f3">    <span style="color:#010001">stlport</span>::<span style="color:#010001">hash_map</span>&lt;<span style="color:#010001">stlport</span>::<span style="color:#010001">string</span> , <span style="color:#0000ff">int</span>&gt;::<span style="color:#010001">iterator</span> <span style="color:#010001">iter</span> = <span style="color:#010001">map</span>.<span style="color:#010001">find</span>(<span style="color:#a31515">&quot;teSt&quot;</span>);</li> <li>    <span style="color:#0000ff">if</span>(<span style="color:#010001">iter</span> != <span style="color:#010001">map</span>.<span style="color:#010001">end</span>())</li> <li style="background: #f3f3f3">        <span style="color:#010001">printf</span>(<span style="color:#a31515">&quot;Found!&#92;n&quot;</span>);</li> <li>&nbsp;</li> <li style="background: #f3f3f3">    <span style="color:#0000ff">return</span> 0;</li> <li>}</li> </ol> </div> </div> </div><img src ="http://www.cppblog.com/heath/aggbug/150906.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/heath/" target="_blank">Heath</a> 2011-07-13 23:36 <a href="http://www.cppblog.com/heath/archive/2011/07/13/150906.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>让VC++ 2003与Win7和睦相处</title><link>http://www.cppblog.com/heath/archive/2011/03/14/141837.html</link><dc:creator>Heath</dc:creator><author>Heath</author><pubDate>Mon, 14 Mar 2011 15:49:00 GMT</pubDate><guid>http://www.cppblog.com/heath/archive/2011/03/14/141837.html</guid><wfw:comment>http://www.cppblog.com/heath/comments/141837.html</wfw:comment><comments>http://www.cppblog.com/heath/archive/2011/03/14/141837.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/heath/comments/commentRss/141837.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/heath/services/trackbacks/141837.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp; 微软太谦虚了，Win7对VS2003的兼容性并不像他说的那样差。其实仅有两个问题：</p> <p>1、search时程序死掉</p> <p>2、debug时锁住pdb不释放，下次build时出现文件写错误</p> <p>&nbsp;&nbsp;&nbsp; 对于第一个问题，在devenv.exe属性的Compatibility的Settings中勾选“Disable visual themes”，或者停用Aero主题，使用Basic themes。</p> <p>&nbsp;&nbsp;&nbsp; 对于第二个问题，可使用sysinternals工具<a href="http://technet.microsoft.com/en-us/sysinternals/bb896655" target="_blank">handle</a>来释放对pdb的引用，在此不列出handle的使用，有兴趣可以自己研究。下面给出一个批处理，关闭指定名称的pdb文件占用：</p> <p> <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:45bc8aec-c6b1-457e-a654-2fb55167abc7" class="wlWriterEditableSmartContent"><pre style="background-color:#FFFFFF;white-space:-moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; white-space: pre-wrap; word-wrap: break-word;overflow: auto;"><span style="color: #0000FF;">@echo</span><span style="color: #000000;"> </span><span style="color: #0000FF;">off</span><span style="color: #000000;">
</span><span style="color: #0000FF;">cd</span><span style="color: #000000;"> </span><span style="color: #000000;">/</span><span style="color: #000000;">d </span><span style="color: #000000;">"</span><span style="color: #000000;">%~dp0</span><span style="color: #000000;">"</span><span style="color: #000000;">
</span><span style="color: #0000FF;">for</span><span style="color: #000000;"> </span><span style="color: #000000;">/</span><span style="color: #000000;">f </span><span style="color: #000000;">"</span><span style="color: #000000;">tokens=2-3 skip=5 delims=:</span><span style="color: #000000;">"</span><span style="color: #000000;"> %%a in </span><span style="color: #000000;">(</span><span style="color: #000000;">'handle -p devenv</span><span style="color: #000000;">.</span><span style="color: #000000;">exe </span><span style="color: #000000;">"</span><span style="color: #000000;">%1.pdb</span><span style="color: #000000;">"</span><span style="color: #000000;">'</span><span style="color: #000000;">)</span><span style="color: #000000;"> </span><span style="color: #0000FF;">do</span><span style="color: #000000;"> </span><span style="color: #000000;">(</span><span style="color: #000000;">
  </span><span style="color: #0000FF;">for</span><span style="color: #000000;"> </span><span style="color: #000000;">/</span><span style="color: #000000;">f </span><span style="color: #000000;">"</span><span style="color: #000000;">tokens=1,4</span><span style="color: #000000;">"</span><span style="color: #000000;"> %%c in </span><span style="color: #000000;">(</span><span style="color: #000000;">"</span><span style="color: #000000;">%%a%%b</span><span style="color: #000000;">"</span><span style="color: #000000;">)</span><span style="color: #000000;"> </span><span style="color: #0000FF;">do</span><span style="color: #000000;"> </span><span style="color: #000000;">(</span><span style="color: #000000;">
      handle</span><span style="color: #000000;">.</span><span style="color: #000000;">exe -c %%d -y -p %%c
  </span><span style="color: #000000;">)</span><span style="color: #000000;">
</span><span style="color: #000000;">)</span><span style="color: #000000;">
</span><span style="color: #0000FF;">@echo</span><span style="color: #000000;"> </span><span style="color: #0000FF;">on</span><span style="color: #000000;">
</span></pre><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --></div></p>
<p>&nbsp;&nbsp;&nbsp; 将其保存到一个文件，放在project的pre-build event。当然，还需要一个参数来喂批处理中的%1。</p><img src ="http://www.cppblog.com/heath/aggbug/141837.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/heath/" target="_blank">Heath</a> 2011-03-14 23:49 <a href="http://www.cppblog.com/heath/archive/2011/03/14/141837.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>对TortoiseSVN的扩展实践</title><link>http://www.cppblog.com/heath/archive/2011/01/23/139190.html</link><dc:creator>Heath</dc:creator><author>Heath</author><pubDate>Sun, 23 Jan 2011 13:55:00 GMT</pubDate><guid>http://www.cppblog.com/heath/archive/2011/01/23/139190.html</guid><wfw:comment>http://www.cppblog.com/heath/comments/139190.html</wfw:comment><comments>http://www.cppblog.com/heath/archive/2011/01/23/139190.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/heath/comments/commentRss/139190.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/heath/services/trackbacks/139190.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp; 个人有个需求，希望在update时用颜色高亮出自己感兴趣的文件，目前我只对sln及vcproj文件感兴趣。</p> <p>&nbsp;&nbsp;&nbsp; 首先想到的是用TSVN的hook script(client side)，但仔细研究后发现传入script的参数仅有操作路径，且通过script也不可能访问/修改Notify对话框中的信息和字体颜色。唯一的办法就是修改源代码重新编译，从TSVN官方代码库获取到了trunk source code后，按照根路径下的build.txt文档进行构建（doc\build-zh_CN.txt有些过时了，不要按照该文档进行构建），最新代码需要用到VC++10.0编译，过程中除了hunspell下affixmgr.cxx、hashmgr.cxx和hunspell.cxx三个文件由于svn的编码转换导致文件内容异常外，没什么大问题。</p> <p>&nbsp;&nbsp;&nbsp; TSVN的代码写得很beautiful，这个要赞一下。在清晰的结构下很快对source code进行了分析，发现TSVN的操作处理代码位于src\TortoiseProc下面，而对各种操作的UI反馈主要放在SVNProgressDlg中。找到要修改的地方，添加了几行代码，用NAnt构建后，替换现装版中的对应文件，出现subversion too old问题，点开TortoiseProc.exe发现最新代码中的subversion版本已经用到了1.7.2，而TSVN对外发布的最新版却还是1.6.15，可能是开发者认为跨MinorVersion就算too old了吧。算了，不折腾了，直接拉发布版1.6.12的tag来修改吧。</p> <p>&nbsp;&nbsp;&nbsp; 1.6.12版的source code用VC++9.0编译，按照build文档调整一下与前面构建有差异的地方，值得注意的是TSVN用到了Ribbon，所以必须先安装一下vs2008 sp1补丁。在构建TortoiseProc时，有个头文件中重复声明了MFC中已经定义了的类型，导致构建失败，需要将重复定义之处注释掉。TortoiseProc一出，我的目的就达到了，由于构建的版本与我安装的一致，所以只需替换TortoiseProc.exe，经测试一切OK。</p> <p><a href="http://www.cppblog.com/images/cppblog_com/heath/Windows-Live-Writer/3869eb50ee51_FB58/test_2.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="test" border="0" alt="test" src="http://www.cppblog.com/images/cppblog_com/heath/Windows-Live-Writer/3869eb50ee51_FB58/test_thumb.png" width="671" height="310"></a> </p> <p>&nbsp;&nbsp;&nbsp; 个人觉得，对TSVN的扩展还是麻烦了一点，整个构建过程花费了大量时间，建议增强hook script。</p><img src ="http://www.cppblog.com/heath/aggbug/139190.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/heath/" target="_blank">Heath</a> 2011-01-23 21:55 <a href="http://www.cppblog.com/heath/archive/2011/01/23/139190.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>&amp;quot;Inception&amp;quot; 简评</title><link>http://www.cppblog.com/heath/archive/2010/09/05/125961.html</link><dc:creator>Heath</dc:creator><author>Heath</author><pubDate>Sun, 05 Sep 2010 15:02:00 GMT</pubDate><guid>http://www.cppblog.com/heath/archive/2010/09/05/125961.html</guid><wfw:comment>http://www.cppblog.com/heath/comments/125961.html</wfw:comment><comments>http://www.cppblog.com/heath/archive/2010/09/05/125961.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cppblog.com/heath/comments/commentRss/125961.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/heath/services/trackbacks/125961.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp; 不愧为“天才导演”，Nolan选取了人们很少关注的梦境作为题材，利用梦中梦的递归手法拓宽了时空感，让观众觉得影片很有嚼头。影片首尾呼应，中间以入侵目标梦境并植入一个想法为主线，递归深度达到了4层，可见导演的用心之处。期间还穿插着一条支线，那就是柯布的梦境，这一直是他的痛，直到故事最后，他才释怀。</p> <p>&nbsp;&nbsp;&nbsp; 心理学为该影片了理论基础，盗梦的目的就是为了窥探目标埋藏在心里的秘密，因为梦是伪装得最少的潜意识表现。而作为进入目标梦境的工具，导演却是一笔带过，不得不说是一个遗憾，因而该影片也就成了一部纯科幻电影。</p> <p>&nbsp;&nbsp;&nbsp; 观影毕，个人感觉Dream Design应该也和Game Design相似吧：故事、人物、时间、场景的设计。Programmer也深刻地温习了一下递归吧。</p> <p>&nbsp;</p> <p>B.T.W. 多年以来，能够撼动我思想的影片仅有两部："The Matrix"和"Inception"。</p> <p>&nbsp;</p> <p><a href="http://www.cppblog.com/images/cppblog_com/heath/WindowsLiveWriter/Inception_13B82/Inception_2.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Inception" border="0" alt="Inception" src="http://www.cppblog.com/images/cppblog_com/heath/WindowsLiveWriter/Inception_13B82/Inception_thumb.jpg" width="409" height="570"></a></p><img src ="http://www.cppblog.com/heath/aggbug/125961.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/heath/" target="_blank">Heath</a> 2010-09-05 23:02 <a href="http://www.cppblog.com/heath/archive/2010/09/05/125961.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Kindle DXG</title><link>http://www.cppblog.com/heath/archive/2010/08/21/124193.html</link><dc:creator>Heath</dc:creator><author>Heath</author><pubDate>Sat, 21 Aug 2010 08:44:00 GMT</pubDate><guid>http://www.cppblog.com/heath/archive/2010/08/21/124193.html</guid><wfw:comment>http://www.cppblog.com/heath/comments/124193.html</wfw:comment><comments>http://www.cppblog.com/heath/archive/2010/08/21/124193.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/heath/comments/commentRss/124193.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/heath/services/trackbacks/124193.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp; Amazon在7月7日发布了代号为Graphite的Kindle DX，同时全面下调kindle 2和kindle DX的价格。原计划等IPad在HK上市后去那边买的，后来考虑到仅用于看电子书，还是E-INK屏比较好，正好9.7寸屏的Kindle DXG也落到了心理价位，于是决定入手之。 7月9日下单，期间遇上了海关严打，货被扣了2周后交税放行，7月30日到手。使用近一个月，总体来讲还不错：</p> <p>1）Free 3G速度快，看新闻方便；</p> <p>2）分辨率高，字体清晰；</p> <p>2）Native PDF Support，翻页速度已经很快了，对于内嵌中文字体也有很好地支持。看PDF文档时，9.7寸屏比6寸屏更易于阅读。Zoom功能近乎鸡肋，因为很不喜欢拉着滚动条阅读，看扫描书的时候顶多用一下横屏。此外，由于Kindle会把颜色转换为灰度，所以对于非纯色的文字，会显得很淡。</p> <p>3）由于Amazon将Mobipocket收归旗下的缘故，所以对mobi/prc文件格式的支持和azw格式一样好，提供指译、字体缩放、注释/笔记等功能；</p> <p>4）通过Gift Card的方式购买电子书也挺方便，免去了买纸质书的运费和运输延迟。不过技术书的电子版本很少，且价格昂贵；</p> <p>5）待机时间长，这是E-INK阅读器的一大优势；</p> <p>6）加上原装皮套，重量和一本A4 600页左右的书差不多。</p> <p>&nbsp;&nbsp;&nbsp; 对于电子书转换工具，个人推荐：Mobipocket和Calibre（仅Mac OS）。后者是开源的，功能和输出文件质量胜于前者。</p> <p><img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="image" border="0" alt="image" src="http://www.cppblog.com/images/cppblog_com/heath/WindowsLiveWriter/KindleDXG_DFA1/image_3.png" width="804" height="604"></p> <p><img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="image" border="0" alt="image" src="http://www.cppblog.com/images/cppblog_com/heath/WindowsLiveWriter/KindleDXG_DFA1/image_6.png" width="804" height="604"> </p> <p><img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="image" border="0" alt="image" src="http://www.cppblog.com/images/cppblog_com/heath/WindowsLiveWriter/KindleDXG_DFA1/image_9.png" width="804" height="604"> </p> <p><img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="image" border="0" alt="image" src="http://www.cppblog.com/images/cppblog_com/heath/WindowsLiveWriter/KindleDXG_DFA1/image_12.png" width="804" height="604"></p><img src ="http://www.cppblog.com/heath/aggbug/124193.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/heath/" target="_blank">Heath</a> 2010-08-21 16:44 <a href="http://www.cppblog.com/heath/archive/2010/08/21/124193.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>How to install Mac OS X 10.6.3 on PC from Hard Disk</title><link>http://www.cppblog.com/heath/archive/2010/05/14/115403.html</link><dc:creator>Heath</dc:creator><author>Heath</author><pubDate>Fri, 14 May 2010 13:57:00 GMT</pubDate><guid>http://www.cppblog.com/heath/archive/2010/05/14/115403.html</guid><wfw:comment>http://www.cppblog.com/heath/comments/115403.html</wfw:comment><comments>http://www.cppblog.com/heath/archive/2010/05/14/115403.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cppblog.com/heath/comments/commentRss/115403.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/heath/services/trackbacks/115403.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 想做iphone/ipad开发，又不想买mac机的同学可以参考下&nbsp;&nbsp;<a href='http://www.cppblog.com/heath/archive/2010/05/14/115403.html'>阅读全文</a><img src ="http://www.cppblog.com/heath/aggbug/115403.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/heath/" target="_blank">Heath</a> 2010-05-14 21:57 <a href="http://www.cppblog.com/heath/archive/2010/05/14/115403.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Enable AHCI mode after installing Windows xp</title><link>http://www.cppblog.com/heath/archive/2010/05/14/115400.html</link><dc:creator>Heath</dc:creator><author>Heath</author><pubDate>Fri, 14 May 2010 13:26:00 GMT</pubDate><guid>http://www.cppblog.com/heath/archive/2010/05/14/115400.html</guid><wfw:comment>http://www.cppblog.com/heath/comments/115400.html</wfw:comment><comments>http://www.cppblog.com/heath/archive/2010/05/14/115400.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/heath/comments/commentRss/115400.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/heath/services/trackbacks/115400.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 用Snow Leopard需要开启AHCI，希望在不重装原来XP的提前下让两个系统并存，在网上找到一篇很完美的解决方案，做了一些修改以适应自己的TPower I45。有同样需求的同学可以参考一下&nbsp;&nbsp;<a href='http://www.cppblog.com/heath/archive/2010/05/14/115400.html'>阅读全文</a><img src ="http://www.cppblog.com/heath/aggbug/115400.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/heath/" target="_blank">Heath</a> 2010-05-14 21:26 <a href="http://www.cppblog.com/heath/archive/2010/05/14/115400.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++认知误区(1)：成员保护机制</title><link>http://www.cppblog.com/heath/archive/2010/04/24/113445.html</link><dc:creator>Heath</dc:creator><author>Heath</author><pubDate>Sat, 24 Apr 2010 08:16:00 GMT</pubDate><guid>http://www.cppblog.com/heath/archive/2010/04/24/113445.html</guid><wfw:comment>http://www.cppblog.com/heath/comments/113445.html</wfw:comment><comments>http://www.cppblog.com/heath/archive/2010/04/24/113445.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/heath/comments/commentRss/113445.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/heath/services/trackbacks/113445.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 生活、工作中会有各种各样认知误区，与自己认知相悖的，不一定是错误的&nbsp;&nbsp;<a href='http://www.cppblog.com/heath/archive/2010/04/24/113445.html'>阅读全文</a><img src ="http://www.cppblog.com/heath/aggbug/113445.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/heath/" target="_blank">Heath</a> 2010-04-24 16:16 <a href="http://www.cppblog.com/heath/archive/2010/04/24/113445.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Visual Build</title><link>http://www.cppblog.com/heath/archive/2010/03/09/109314.html</link><dc:creator>Heath</dc:creator><author>Heath</author><pubDate>Tue, 09 Mar 2010 12:22:00 GMT</pubDate><guid>http://www.cppblog.com/heath/archive/2010/03/09/109314.html</guid><wfw:comment>http://www.cppblog.com/heath/comments/109314.html</wfw:comment><comments>http://www.cppblog.com/heath/archive/2010/03/09/109314.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/heath/comments/commentRss/109314.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/heath/services/trackbacks/109314.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/heath/archive/2010/03/09/109314.html'>阅读全文</a><img src ="http://www.cppblog.com/heath/aggbug/109314.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/heath/" target="_blank">Heath</a> 2010-03-09 20:22 <a href="http://www.cppblog.com/heath/archive/2010/03/09/109314.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>让博客写得更轻松点吧</title><link>http://www.cppblog.com/heath/archive/2010/01/18/105901.html</link><dc:creator>Heath</dc:creator><author>Heath</author><pubDate>Sun, 17 Jan 2010 16:36:00 GMT</pubDate><guid>http://www.cppblog.com/heath/archive/2010/01/18/105901.html</guid><wfw:comment>http://www.cppblog.com/heath/comments/105901.html</wfw:comment><comments>http://www.cppblog.com/heath/archive/2010/01/18/105901.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/heath/comments/commentRss/105901.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/heath/services/trackbacks/105901.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp; 许久没更新博客，一是因为工作占据了几乎所有时间，二是想要发布一篇图文并茂的博文真的太耗时了。对于第二点，繁琐的上传图片和调整格式就会浪费很多宝贵的时间，虽然MS Office 2007提供了blog功能，消除了手动上传图片的烦恼，然而在实际使用中，不知是否是Metaweblog API转换Word格式的问题，上传至blog的文章的格式却与Word中的大相径庭，比如：标号错乱，图片拉伸缩小、编号不能显示等诸多问题，最终还是作罢，让文档存在本地，期待有大把的空闲时间再作分享。</p> <p>&nbsp;&nbsp;&nbsp; 问题还是要想办法解决啊，用google搜索了一下“博客写作工具”，才得知MS推出了一款免费的博客写作工具——Windows Live Writer。我正在用它写着这篇文章，它就是Windows版的.Text，有Edit、Preview和HTML Source，由于直接使用了HTML，就不存在像Word发布到博客时格式错乱的问题。比起直接使用.Text编辑文章，Windows Live Writer的优势在于不依赖网络、操作速度快、支持一些Web环境难以做到的操作（如：copy &amp; paste pictures）以及Plug-in（如：代码高亮）。</p> <p>&nbsp;&nbsp;&nbsp; 夜深了，今天就试用到这里。</p> <blockquote> <p><a href="http://www.cppblog.com/images/cppblog_com/heath/WindowsLiveWriter/7af06e88cbf2_86A/Koala_2.jpg"><img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="Koala" border="0" alt="Koala" src="http://www.cppblog.com/images/cppblog_com/heath/WindowsLiveWriter/7af06e88cbf2_86A/Koala_thumb.jpg" width="644" height="484"></a></p></blockquote> <blockquote> <p>If you want to be a good writer, you must write more… </p></blockquote> <p>&nbsp;&nbsp;&nbsp; Writer下载地址<a title="http://download.live.com/writer" href="http://download.live.com/writer">http://download.live.com/writer</a></p><img src ="http://www.cppblog.com/heath/aggbug/105901.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/heath/" target="_blank">Heath</a> 2010-01-18 00:36 <a href="http://www.cppblog.com/heath/archive/2010/01/18/105901.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Windows 7 &amp; Visual Studio 2010 使用小记</title><link>http://www.cppblog.com/heath/archive/2009/12/27/104160.html</link><dc:creator>Heath</dc:creator><author>Heath</author><pubDate>Sat, 26 Dec 2009 16:13:00 GMT</pubDate><guid>http://www.cppblog.com/heath/archive/2009/12/27/104160.html</guid><wfw:comment>http://www.cppblog.com/heath/comments/104160.html</wfw:comment><comments>http://www.cppblog.com/heath/archive/2009/12/27/104160.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/heath/comments/commentRss/104160.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/heath/services/trackbacks/104160.html</trackback:ping><description><![CDATA[Windows 7
<div>总体来说比Vista强多了，主要表现在资源占用和易用性上。"search programs and files"是笔者最喜欢用的功能，不管是执行程序还是查找记忆模糊的文档，都能很好满足需求。此外，在程序的兼容性上，Windows 7也有很出色的表现。</div>
<div style="TEXT-ALIGN: left">Visual Studio 2010</div>
<div style="TEXT-ALIGN: left">作为一名Windows程序员，Visual Studio一直是个开发利器，从6.0到2003, 2008，每个版本在功能、易用性、稳定性上都有稳步提升。前不久Visual Studio 2010评估版发布，笔者第一时间到官网下载，一方面是因为Visual Studio 2008在Windows 7下连接程序有时会崩溃，另一方面想看看新版有那些改进。经过一段时间的使用，感受如下(只关注VC++部分)：</div>
<div style="TEXT-ALIGN: left">1）UI的颜色、布局有所调整，但感觉不是那么和谐；</div>
<div style="TEXT-ALIGN: left">2）创建MFC程序可以选择的界面风格丰富了，不用借助第三方组件就可以开发出复杂界面；</div>
<div style="TEXT-ALIGN: left">3）智能提示更稳定，虽然吸收了vs助手的一些小功能，但最好用的Find File in Solution还是没有集成进来；</div>
<div style="TEXT-ALIGN: left">4）围绕Team development更丰富和完善的功能，Visual Studio已经覆盖了项目开发的各个方面，已经不再是只关注代码编写、编译的单纯IDE了。</div>
<div style="TEXT-ALIGN: left">4）在Windows 7上运行稳定。</div>
<div align=left src_cetemp="/images/cppblog_com/heath/VS2010_Ribbon.PNG">下图为MFC Ribbon做App：<img border=0 alt="" align=left src="http://www.cppblog.com/images/cppblog_com/heath/VS2010_Ribbon.PNG" width=600 height=348></div>
<img src ="http://www.cppblog.com/heath/aggbug/104160.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/heath/" target="_blank">Heath</a> 2009-12-27 00:13 <a href="http://www.cppblog.com/heath/archive/2009/12/27/104160.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>听Lippman讲座</title><link>http://www.cppblog.com/heath/archive/2009/12/05/102605.html</link><dc:creator>Heath</dc:creator><author>Heath</author><pubDate>Sat, 05 Dec 2009 08:19:00 GMT</pubDate><guid>http://www.cppblog.com/heath/archive/2009/12/05/102605.html</guid><wfw:comment>http://www.cppblog.com/heath/comments/102605.html</wfw:comment><comments>http://www.cppblog.com/heath/archive/2009/12/05/102605.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cppblog.com/heath/comments/commentRss/102605.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/heath/services/trackbacks/102605.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Next-Generation Large-Scale Software Development: Challenges and Solutions&nbsp;&nbsp;<a href='http://www.cppblog.com/heath/archive/2009/12/05/102605.html'>阅读全文</a><img src ="http://www.cppblog.com/heath/aggbug/102605.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/heath/" target="_blank">Heath</a> 2009-12-05 16:19 <a href="http://www.cppblog.com/heath/archive/2009/12/05/102605.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Amazon低调推出Kindle for PC</title><link>http://www.cppblog.com/heath/archive/2009/11/20/101453.html</link><dc:creator>Heath</dc:creator><author>Heath</author><pubDate>Fri, 20 Nov 2009 02:14:00 GMT</pubDate><guid>http://www.cppblog.com/heath/archive/2009/11/20/101453.html</guid><wfw:comment>http://www.cppblog.com/heath/comments/101453.html</wfw:comment><comments>http://www.cppblog.com/heath/archive/2009/11/20/101453.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/heath/comments/commentRss/101453.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/heath/services/trackbacks/101453.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/heath/archive/2009/11/20/101453.html'>阅读全文</a><img src ="http://www.cppblog.com/heath/aggbug/101453.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/heath/" target="_blank">Heath</a> 2009-11-20 10:14 <a href="http://www.cppblog.com/heath/archive/2009/11/20/101453.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Mark H-H and his 'Real-Time Cameras'</title><link>http://www.cppblog.com/heath/archive/2009/11/19/101404.html</link><dc:creator>Heath</dc:creator><author>Heath</author><pubDate>Thu, 19 Nov 2009 10:35:00 GMT</pubDate><guid>http://www.cppblog.com/heath/archive/2009/11/19/101404.html</guid><wfw:comment>http://www.cppblog.com/heath/comments/101404.html</wfw:comment><comments>http://www.cppblog.com/heath/archive/2009/11/19/101404.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/heath/comments/commentRss/101404.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/heath/services/trackbacks/101404.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/heath/archive/2009/11/19/101404.html'>阅读全文</a><img src ="http://www.cppblog.com/heath/aggbug/101404.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/heath/" target="_blank">Heath</a> 2009-11-19 18:35 <a href="http://www.cppblog.com/heath/archive/2009/11/19/101404.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《影响力》读书笔记</title><link>http://www.cppblog.com/heath/archive/2009/10/28/99623.html</link><dc:creator>Heath</dc:creator><author>Heath</author><pubDate>Tue, 27 Oct 2009 16:29:00 GMT</pubDate><guid>http://www.cppblog.com/heath/archive/2009/10/28/99623.html</guid><wfw:comment>http://www.cppblog.com/heath/comments/99623.html</wfw:comment><comments>http://www.cppblog.com/heath/archive/2009/10/28/99623.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/heath/comments/commentRss/99623.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/heath/services/trackbacks/99623.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 社交之利器&nbsp;&nbsp;<a href='http://www.cppblog.com/heath/archive/2009/10/28/99623.html'>阅读全文</a><img src ="http://www.cppblog.com/heath/aggbug/99623.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/heath/" target="_blank">Heath</a> 2009-10-28 00:29 <a href="http://www.cppblog.com/heath/archive/2009/10/28/99623.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>初读程序员修炼之道</title><link>http://www.cppblog.com/heath/archive/2009/10/27/99620.html</link><dc:creator>Heath</dc:creator><author>Heath</author><pubDate>Tue, 27 Oct 2009 15:53:00 GMT</pubDate><guid>http://www.cppblog.com/heath/archive/2009/10/27/99620.html</guid><wfw:comment>http://www.cppblog.com/heath/comments/99620.html</wfw:comment><comments>http://www.cppblog.com/heath/archive/2009/10/27/99620.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/heath/comments/commentRss/99620.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/heath/services/trackbacks/99620.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 为什么在设计良好或者优美的代码之上，我们总有一种竭力维护其优美性的倾向呢？一直以来，我都以为这只是我的个人好恶，然而...&nbsp;&nbsp;<a href='http://www.cppblog.com/heath/archive/2009/10/27/99620.html'>阅读全文</a><img src ="http://www.cppblog.com/heath/aggbug/99620.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/heath/" target="_blank">Heath</a> 2009-10-27 23:53 <a href="http://www.cppblog.com/heath/archive/2009/10/27/99620.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[Ref]Getting a Job in 3D and Games</title><link>http://www.cppblog.com/heath/archive/2009/08/27/94607.html</link><dc:creator>Heath</dc:creator><author>Heath</author><pubDate>Thu, 27 Aug 2009 14:03:00 GMT</pubDate><guid>http://www.cppblog.com/heath/archive/2009/08/27/94607.html</guid><wfw:comment>http://www.cppblog.com/heath/comments/94607.html</wfw:comment><comments>http://www.cppblog.com/heath/archive/2009/08/27/94607.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/heath/comments/commentRss/94607.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/heath/services/trackbacks/94607.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: A good article about career in 3D and Game&nbsp;&nbsp;<a href='http://www.cppblog.com/heath/archive/2009/08/27/94607.html'>阅读全文</a><img src ="http://www.cppblog.com/heath/aggbug/94607.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/heath/" target="_blank">Heath</a> 2009-08-27 22:03 <a href="http://www.cppblog.com/heath/archive/2009/08/27/94607.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>以往的文章连接</title><link>http://www.cppblog.com/heath/archive/2009/06/24/88436.html</link><dc:creator>Heath</dc:creator><author>Heath</author><pubDate>Wed, 24 Jun 2009 08:31:00 GMT</pubDate><guid>http://www.cppblog.com/heath/archive/2009/06/24/88436.html</guid><wfw:comment>http://www.cppblog.com/heath/comments/88436.html</wfw:comment><comments>http://www.cppblog.com/heath/archive/2009/06/24/88436.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/heath/comments/commentRss/88436.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/heath/services/trackbacks/88436.html</trackback:ping><description><![CDATA[<p>博客是个不错的备忘录，把自己的学习心得和思绪Save一下，需要的时候还可以Load。<br><a href="http://blog.csdn.net/Lodger007/">http://blog.csdn.net/Lodger007/</a></p>
<img src ="http://www.cppblog.com/heath/aggbug/88436.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/heath/" target="_blank">Heath</a> 2009-06-24 16:31 <a href="http://www.cppblog.com/heath/archive/2009/06/24/88436.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>近期读到的一些好书</title><link>http://www.cppblog.com/heath/archive/2009/05/06/82112.html</link><dc:creator>Heath</dc:creator><author>Heath</author><pubDate>Wed, 06 May 2009 15:57:00 GMT</pubDate><guid>http://www.cppblog.com/heath/archive/2009/05/06/82112.html</guid><wfw:comment>http://www.cppblog.com/heath/comments/82112.html</wfw:comment><comments>http://www.cppblog.com/heath/archive/2009/05/06/82112.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/heath/comments/commentRss/82112.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/heath/services/trackbacks/82112.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 总结一下&nbsp;&nbsp;<a href='http://www.cppblog.com/heath/archive/2009/05/06/82112.html'>阅读全文</a><img src ="http://www.cppblog.com/heath/aggbug/82112.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/heath/" target="_blank">Heath</a> 2009-05-06 23:57 <a href="http://www.cppblog.com/heath/archive/2009/05/06/82112.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>被动D3D Hooking方案</title><link>http://www.cppblog.com/heath/archive/2008/11/23/67661.html</link><dc:creator>Heath</dc:creator><author>Heath</author><pubDate>Sun, 23 Nov 2008 07:22:00 GMT</pubDate><guid>http://www.cppblog.com/heath/archive/2008/11/23/67661.html</guid><wfw:comment>http://www.cppblog.com/heath/comments/67661.html</wfw:comment><comments>http://www.cppblog.com/heath/archive/2008/11/23/67661.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/heath/comments/commentRss/67661.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/heath/services/trackbacks/67661.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本文介绍了一种与大多数D3D程序截取软件不同的Hooking方式&nbsp;&nbsp;<a href='http://www.cppblog.com/heath/archive/2008/11/23/67661.html'>阅读全文</a><img src ="http://www.cppblog.com/heath/aggbug/67661.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/heath/" target="_blank">Heath</a> 2008-11-23 15:22 <a href="http://www.cppblog.com/heath/archive/2008/11/23/67661.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HOW TO PerfHUD</title><link>http://www.cppblog.com/heath/archive/2008/11/22/67603.html</link><dc:creator>Heath</dc:creator><author>Heath</author><pubDate>Sat, 22 Nov 2008 09:29:00 GMT</pubDate><guid>http://www.cppblog.com/heath/archive/2008/11/22/67603.html</guid><wfw:comment>http://www.cppblog.com/heath/comments/67603.html</wfw:comment><comments>http://www.cppblog.com/heath/archive/2008/11/22/67603.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/heath/comments/commentRss/67603.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/heath/services/trackbacks/67603.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: PerfHUD是NVidia推出的一款免费图形程序性能分析软件，功能很强大，但稳定性还有待提高。&nbsp;&nbsp;<a href='http://www.cppblog.com/heath/archive/2008/11/22/67603.html'>阅读全文</a><img src ="http://www.cppblog.com/heath/aggbug/67603.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/heath/" target="_blank">Heath</a> 2008-11-22 17:29 <a href="http://www.cppblog.com/heath/archive/2008/11/22/67603.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>