<?xml version="1.0" encoding="UTF-8"?>
  <feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html"><![CDATA[技术员日志]]></title>
  <subtitle type="html"><![CDATA[http://www.cnsos.net]]></subtitle>
  <id>http://www.cnsos.net/</id>
  <link rel="alternate" type="text/html" href="http://www.cnsos.net/" /> 
  <link rel="self" type="application/atom+xml" href="http://www.cnsos.net/atom.asp" /> 
  <generator uri="http://www.pjhome.net/" version="2.8">PJBlog3</generator> 
  <updated>2009-06-25T16:22:56+08:00</updated>

  <entry>
	  <title type="html"><![CDATA[十大C++经典教程]]></title>
	  <author>
		 <name>aci</name>
		 <uri>http://www.cnsos.net/</uri>
		 <email>wzwyc@yeah.net</email>
	  </author>
	  <category term="" scheme="http://www.cnsos.net/default.asp?cateID=6" label="编程开发" /> 
	  <updated>2009-06-25T16:22:56+08:00</updated>
	  <published>2009-06-25T16:22:56+08:00</published>
		  <summary type="html"><![CDATA[1.《C++ Primer中文版》（第4版）<br/>&nbsp;&nbsp;&nbsp;&nbsp;【原书名】 C++ Primer （4th Edition）<br/>&nbsp;&nbsp;&nbsp;&nbsp;【原出版社】 Addison Wesley/Pearson<br/>&nbsp;&nbsp;&nbsp;&nbsp;【作者】 （美）Stanley B.Lippman，Josée LaJoie，Barbara E.Moo<br/>&nbsp;&nbsp;&nbsp;&nbsp;【译者】 李师贤<br/>&nbsp;&nbsp;&nbsp;&nbsp;【丛书名】 图灵计算机科学丛书<br/>&nbsp;&nbsp;&nbsp;&nbsp;【出版社】人民邮电出版社<br/>&nbsp;&nbsp;&nbsp;&nbsp;本书是久负盛名的C++经典教程，其内容是C++大师Stanley B. Lippman丰富的实践经验和C++标准委员会原负责人Josée Lajoie对C++标准深入理解的完美结合，已经帮助全球无数程序员学会了C++.本版对前一版进行了彻底的修订，内容经过了重新组织，更加入了C++先驱Barbara E. Moo在C++教学方面的真知灼见。既显著改善了可读性，又充分体现了C++语言的最新进展和当前的业界最佳实践。书中不但新增大量教学辅助内容，用于强调重要的知识点，提醒常见的错误，推荐优秀的编程实践，给出使用提示，还包含大量来自实战的示例和习题。对C++基本概念和技术全面而且权威的阐述，对现代C++编程风格的强调，使本书成为C++初学者的最佳指南；对于中高级程序员，本书也是不可或缺的参考书。本书的前言阐述了 第4版和前一版的不同之处。<br/>&nbsp;&nbsp;&nbsp;&nbsp;难度：★★☆<br/>&nbsp;&nbsp;&nbsp;&nbsp;质量：★★★★★<br/>&nbsp;&nbsp;&nbsp;&nbsp;广度：★★★★★<br/>&nbsp;&nbsp;&nbsp;&nbsp;深度：★★★★<br/>&nbsp;&nbsp;&nbsp;&nbsp;性价：★★★☆<br/><br/>&nbsp;&nbsp; 2.《C++ Primer Plus》（第四版）中文版<br/>&nbsp;&nbsp;&nbsp;&nbsp;【原书名】 C++ Primer Plus，Fourth Edition<br/>&nbsp;&nbsp;&nbsp;&nbsp;【原出版社】 Sams<br/>&nbsp;&nbsp;&nbsp;&nbsp;【作者】 （美）Stephen Prata<br/>&nbsp;&nbsp;&nbsp;&nbsp;【译者】 孙建春 韦强<br/>&nbsp;&nbsp;&nbsp;&nbsp;【丛书名】 Primer Plus 系列<br/>&nbsp;&nbsp;&nbsp;&nbsp;【出版社】 人民邮电出版社<br/>&nbsp;&nbsp;&nbsp;&nbsp;本书针对的是C++初学者，书中从C语言基础知识开始介绍，然后在此基础上详细阐述C++新增的特性，因此不要求读者有C语言方面的背景知识。本书可作为大中院校教授C++课程的教材，也可供初学者自学C++时使用。覆盖面较全，章节安排比较合理，由浅入深，也很容易，故因此失去了一些深度。价格比较便宜，但翻译质量略有不足。现在，第五版也出版了，不过还没有读，看章节都差不多。<br/>&nbsp;&nbsp;&nbsp;&nbsp;难度：☆<br/>&nbsp;&nbsp;&nbsp;&nbsp;质量：★★★☆<br/>&nbsp;&nbsp;&nbsp;&nbsp;广度：★★★★<br/>&nbsp;&nbsp;&nbsp;&nbsp;深度：★★★<br/>&nbsp;&nbsp;&nbsp;&nbsp;性价：★★★☆<br/><br/>&nbsp;&nbsp; 3.《Essential C++》（影印版）<br/>&nbsp;&nbsp;&nbsp;&nbsp;【原书名】 Essential C++<br/>&nbsp;&nbsp;&nbsp;&nbsp;【原出版社】Pearson Education<br/>&nbsp;&nbsp;&nbsp;&nbsp;【作者】 （美）Stanley B.Lippman<br/>&nbsp;&nbsp;&nbsp;&nbsp;【丛书名】 深入C++系列<br/>&nbsp;&nbsp;&nbsp;&nbsp;【出版社】 中国电力出版社<br/>&nbsp;&nbsp;&nbsp;&nbsp;lippman的一部面向初学者的作品。在他写了那么后一本primer之后，为何还要写这么薄这么浅的书呢？其实primer对于初学者来说太笨重了，而这本书却是从不同的方面——C++的本质和组织结构对语言进行阐释，可以帮助初学者对这门语言有一个大致的了解，但知识范围不很全面，不适合系统学习，读者需要一定的编程知识。<br/>&nbsp;&nbsp;&nbsp;&nbsp;难度：★☆<br/>&nbsp;&nbsp;&nbsp;&nbsp;质量：★★★★<br/>&nbsp;&nbsp;&nbsp;&nbsp;广度：★★★☆<br/>&nbsp;&nbsp;&nbsp;&nbsp;深度：★★★<br/>&nbsp;&nbsp;&nbsp;&nbsp;性价：★★☆<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;4.《Effective C++》<br/>&nbsp;&nbsp;&nbsp;&nbsp;【原书名】 Effective C++， Third Edition<br/>&nbsp;&nbsp;&nbsp;&nbsp;【原出版社】 Addison Wesley/Pearson<br/>&nbsp;&nbsp;&nbsp;&nbsp;【作者】 （美）Scott Meyers<br/>&nbsp;&nbsp;&nbsp;&nbsp;【出版社】 电子工业出版社<br/>&nbsp;&nbsp;&nbsp;&nbsp;《More Effective C++》<br/>&nbsp;&nbsp;&nbsp;&nbsp;【原书名】 More Effective C++： 35 New Ways to Improve Your Programs and Designs<br/>&nbsp;&nbsp;&nbsp;&nbsp;【原出版社】 Addison Wesley/Pearson<br/>&nbsp;&nbsp;&nbsp;&nbsp;【作者】 （美）Scott Meyers<br/>&nbsp;&nbsp;&nbsp;&nbsp;【丛书名】 C++设计新思维系列丛书<br/>&nbsp;&nbsp;&nbsp;&nbsp;【出版社】 机械工业出版社<br/>&nbsp;&nbsp;&nbsp;&nbsp;C++真牛人大手笔，之以条款的形式回答了程序员在使用C++时经常提出的“因该注意些什么？”，“因该避免什么？”，“因该怎样去解决？”，“为什么？”等问题。C++程序员想要让自己的水平上更高的档次，此二书必看。价格稍贵，有一定难度，不适合初学者。<br/>&nbsp;&nbsp;&nbsp;&nbsp;难度：★★★☆<br/>&nbsp;&nbsp;&nbsp;&nbsp;质量：★★★★★<br/>&nbsp;&nbsp;&nbsp;&nbsp;广度：★★★<br/>&nbsp;&nbsp;&nbsp;&nbsp;深度：★★★★★<br/>&nbsp;&nbsp;&nbsp;&nbsp;性价：★★<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;5.《C++编程思想》<br/>&nbsp;&nbsp;&nbsp;&nbsp;【原书名】 Thinking in C++<br/>&nbsp;&nbsp;&nbsp;&nbsp;【原出版社】 McGraw Hill<br/>&nbsp;&nbsp;&nbsp;&nbsp;【作者】 Bruce Eckel<br/>&nbsp;&nbsp;&nbsp;&nbsp;【译者】 刘宗田　等<br/>&nbsp;&nbsp;&nbsp;&nbsp;【丛书名】 计算机科学丛书<br/>&nbsp;&nbsp;&nbsp;&nbsp;【出版社】 机械工业出版社<br/>&nbsp;&nbsp;&nbsp;&nbsp; 除了讲述语言之外，有一定的工程性，从设计者的角度来描述C++怎样应用在实际的项目中。语言描述的全面性欠佳，但还是有一定精度的，尤其是在一些小技巧方面。本书还引入了大量的战例，通过一个个的真实项目来引导你使用C++的思想去思考问题。翻译很差，有一定难度。<br/>&nbsp;&nbsp;&nbsp;&nbsp;难度：★★☆<br/>&nbsp;&nbsp;&nbsp;&nbsp;质量：★★★<br/>&nbsp;&nbsp;&nbsp;&nbsp;广度：★★★☆<br/>&nbsp;&nbsp;&nbsp;&nbsp;深度：★★★★<br/>&nbsp;&nbsp;&nbsp;&nbsp;性价：★★★<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;6.《C++大学教程》（第二版）<br/>&nbsp;&nbsp;&nbsp;&nbsp;【原书名】 The Complete C++ Training Course，Second Edition<br/>&nbsp;&nbsp;&nbsp;&nbsp;【作者】 （美）Harvey M.Deitel Paul James Deitel<br/>&nbsp;&nbsp;&nbsp;&nbsp;【译者】 邱仲潘　等<br/>&nbsp;&nbsp;&nbsp;&nbsp;【丛书名】 国外计算机科学教材系列<br/>&nbsp;&nbsp;&nbsp;&nbsp;【出版社】 电子工业出版社<br/>&nbsp;&nbsp;&nbsp;&nbsp;正如其名，真正的大学教程，非常适合初学者学习，内容由浅入深，对C++各项特性的描述都很到位，章节的安排很有条理性，但深度略显不足，翻译质量不能称之为很好，有一定的疏漏，但对于厚度来讲，价格还算比较便宜。<br/>&nbsp;&nbsp;&nbsp;&nbsp;难度：★<br/>&nbsp;&nbsp;&nbsp;&nbsp;质量：★★★☆<br/>&nbsp;&nbsp;&nbsp;&nbsp;广度：★★★★★<br/>&nbsp;&nbsp;&nbsp;&nbsp;深度：★★★★<br/>&nbsp;&nbsp;&nbsp;&nbsp;性价：★★★★☆<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;7.《C++语言的设计和演化》<br/>&nbsp;&nbsp;&nbsp;&nbsp;【原书名】 The Design and Evolution of C++<br/>&nbsp;&nbsp;&nbsp;&nbsp;【原出版社】 Addison-Wesley<br/>&nbsp;&nbsp;&nbsp;&nbsp;【作者】 （美）Bjarne Stroustrup<br/>&nbsp;&nbsp;&nbsp;&nbsp;【译者】 裘宗燕<br/>&nbsp;&nbsp;&nbsp;&nbsp;【丛书名】 计算机科学丛书<br/>&nbsp;&nbsp;&nbsp;&nbsp;【出版社】 机械工业出版社<br/>&nbsp;&nbsp;&nbsp;&nbsp;对于热爱C++的朋友来说，确实好书一本，可以当做小说来读，可以放在厕所或床头上以供消遣。本书对语言本身描述很少，并有一定难度。读者需要对C++有一定了解，不适合初学者阅读。本书也有英文版，如果不喜欢翻译的朋友可以看看。<br/>&nbsp;&nbsp;&nbsp;&nbsp;难度：★★★<br/>&nbsp;&nbsp;&nbsp;&nbsp;质量：★★★<br/>&nbsp;&nbsp;&nbsp;&nbsp;广度：★★☆<br/>&nbsp;&nbsp;&nbsp;&nbsp;深度：★★★★<br/>&nbsp;&nbsp;&nbsp;&nbsp;性价：★★★<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;8.《C++程序设计语言》<br/>&nbsp;&nbsp;&nbsp;&nbsp;【原书名】 The C++ Programming Language， Special Edition<br/>&nbsp;&nbsp;&nbsp;&nbsp;【原出版社】 Addison Wesley<br/>&nbsp;&nbsp;&nbsp;&nbsp;【作者】 （美）Bjarne Stroustrup<br/>&nbsp;&nbsp;&nbsp;&nbsp;【译者】 裘宗燕<br/>&nbsp;&nbsp;&nbsp;&nbsp;【丛书名】 计算机科学丛书<br/>&nbsp;&nbsp;&nbsp;&nbsp;【出版社】 机械工业出版社<br/>&nbsp;&nbsp;&nbsp;&nbsp;C++之父所作，被称之为“C++圣经”。不仅对语言，而且对语言周边的一些如发展史、语义哲学都有比较详细的描述。对语言的描述较为全面，同时包含一部分和程序库相关联的知识，并有一定深度，适合有一定语言基础的初学者，翻译质量不错，价格适中。<br/>&nbsp;&nbsp;&nbsp;&nbsp;难度：★☆<br/>&nbsp;&nbsp;&nbsp;&nbsp;质量：★★★★☆<br/>&nbsp;&nbsp;&nbsp;&nbsp;广度：★★★★☆<br/>&nbsp;&nbsp;&nbsp;&nbsp;深度：★★★★<br/>&nbsp;&nbsp;&nbsp;&nbsp;性价：★★★☆<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;9.《深度探索C++对象模型》（影印版）<br/>&nbsp;&nbsp;&nbsp;&nbsp;【原书名】 Inside the C++ Object Model<br/>&nbsp;&nbsp;&nbsp;&nbsp;【原出版社】 Pearson Education<br/>&nbsp;&nbsp;&nbsp;&nbsp;【作者】 （美）Stanley B.Lippman<br/>&nbsp;&nbsp;&nbsp;&nbsp;【丛书名】 深入C++系列<br/>&nbsp;&nbsp;&nbsp;&nbsp;【出版社】 中国电力出版社<br/>&nbsp;&nbsp;&nbsp;&nbsp;第一代C++编译器开发主管所写。如果你想成为真正的C++高手，看这本书，他为你讲述了编译器在处理各种语法时在“后台”所做的事。对C++有较深入了解的读者会在读后有恍然大悟之感。候杰翻译，质量相当不错，但内容太深，只适合对C++有较深了解的读者，价格偏贵。<br/>&nbsp;&nbsp;&nbsp;&nbsp;难度：★★★★☆<br/>&nbsp;&nbsp;&nbsp;&nbsp;质量：★★★★★<br/>&nbsp;&nbsp;&nbsp;&nbsp;广度：★★★<br/>&nbsp;&nbsp;&nbsp;&nbsp;深度：★★★★★<br/>&nbsp;&nbsp;&nbsp;&nbsp;性价：★★<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;10.《C++程序设计教程》（钱能-清华版）<br/>&nbsp;&nbsp;&nbsp;&nbsp;【作者】 钱能 董灵平 张敏霞<br/>&nbsp;&nbsp;&nbsp;&nbsp;【丛书名】 C++程序设计系列教材<br/>&nbsp;&nbsp;&nbsp;&nbsp;【出版社】 清华大学出版社<br/>&nbsp;&nbsp;&nbsp;&nbsp;国人所著，国人水平实在有限，深度和广度欠佳，放在这十大里实在是因为再挑不出好书了。可圈可点之处有讲解较为清析、简单，符合中国学生思路，价格便宜。<br/>&nbsp;&nbsp;&nbsp;&nbsp;难度：☆<br/>&nbsp;&nbsp;&nbsp;&nbsp;质量：★★★<br/>&nbsp;&nbsp;&nbsp;&nbsp;广度：★★★☆<br/>&nbsp;&nbsp;&nbsp;&nbsp;深度：★★★<br/>&nbsp;&nbsp;&nbsp;&nbsp;性价：★★★★★<br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.cnsos.net/article.asp?id=168" /> 
	  <id>http://www.cnsos.net/default.asp?id=168</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[UltraEdit使用的小技巧]]></title>
	  <author>
		 <name>aci</name>
		 <uri>http://www.cnsos.net/</uri>
		 <email>wzwyc@yeah.net</email>
	  </author>
	  <category term="" scheme="http://www.cnsos.net/default.asp?cateID=8" label="基础应用" /> 
	  <updated>2009-06-25T12:23:48+08:00</updated>
	  <published>2009-06-25T12:23:48+08:00</published>
		  <summary type="html"><![CDATA[　　UltraEdit在修改过文件的时候，都会在当前目录下，把原来的文件备份成&#34;.bak&#34;文件。大部分时候，这些bak文件都没什么用，而且多了以后，也挺影响视觉的。<br/>　　可以用下面的方法进行修改：<br/>1、选择菜单“高级”-“配置”。<br/>2、打开“备份”标签，选择“默认备份目录”的“浏览”按钮，把备份的目录修改为&#34;C:\Windows\temp&#34;目录。<br/><br/>这样所有的备份目录都会生成到系统的这个temp目录下，如果万一修改错了，可以到这个temp目录下寻找备份的文件，然后恢复。]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.cnsos.net/article.asp?id=167" /> 
	  <id>http://www.cnsos.net/default.asp?id=167</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[C++从入门到精通视频教程]]></title>
	  <author>
		 <name>aci</name>
		 <uri>http://www.cnsos.net/</uri>
		 <email>wzwyc@yeah.net</email>
	  </author>
	  <category term="" scheme="http://www.cnsos.net/default.asp?cateID=6" label="编程开发" /> 
	  <updated>2009-06-02T17:53:45+08:00</updated>
	  <published>2009-06-02T17:53:45+08:00</published>
		  <summary type="html"><![CDATA[<a href="http://www.enet.com.cn/eschool/video/c++/" target="_blank" rel="external">http://www.enet.com.cn/eschool/video/c++/</a>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.cnsos.net/article.asp?id=166" /> 
	  <id>http://www.cnsos.net/default.asp?id=166</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[JAVA-J2ME移动开发实战教学]]></title>
	  <author>
		 <name>aci</name>
		 <uri>http://www.cnsos.net/</uri>
		 <email>wzwyc@yeah.net</email>
	  </author>
	  <category term="" scheme="http://www.cnsos.net/default.asp?cateID=6" label="编程开发" /> 
	  <updated>2009-05-15T07:25:51+08:00</updated>
	  <published>2009-05-15T07:25:51+08:00</published>
		  <summary type="html"><![CDATA[一个不错的关于J2ME开发的视频教程：<br/><a href="http://www.enet.com.cn/eschool/video/j2me/" target="_blank" rel="external">http://www.enet.com.cn/eschool/video/j2me/</a>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.cnsos.net/article.asp?id=165" /> 
	  <id>http://www.cnsos.net/default.asp?id=165</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[关闭SVN服务 (关闭 TSVNCache.exe 进程)]]></title>
	  <author>
		 <name>aci</name>
		 <uri>http://www.cnsos.net/</uri>
		 <email>wzwyc@yeah.net</email>
	  </author>
	  <category term="" scheme="http://www.cnsos.net/default.asp?cateID=8" label="基础应用" /> 
	  <updated>2009-05-15T06:40:18+08:00</updated>
	  <published>2009-05-15T06:40:18+08:00</published>
		  <summary type="html"><![CDATA[在Windows下使用SVN，通常都会安装TortoiseSVN，安装后会有一个TSVNCache.exe的进程驻留内存，这个进程会定时地去扫描Subversion管理的文件夹/文件是否被修改了，一旦发现有更新，那本地的这些有更新的文件/文件夹就会被更新，这个动作不仅会占用10-50MB左右的内存，而且也会在执行的瞬间占用超过CPU 50%的负载。<br/><br/>这个进程还是影响到了PC的使用性能，根据实际需要，一般可以停了它：<br/><br/>Explorer右键菜单→TortoiseSVN→Settings→Icon Overlays→Status cache，将这一项设成None。<br/><br/>替代方案：使用“Explorer右键菜单→TortoiseSVN→Check for modifications”显示差异，这样虽然麻烦一些，但是节约了系统资源，对于配置不高的机器还是比较值得的。<br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.cnsos.net/article.asp?id=164" /> 
	  <id>http://www.cnsos.net/default.asp?id=164</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[什么是MSDN？]]></title>
	  <author>
		 <name>aci</name>
		 <uri>http://www.cnsos.net/</uri>
		 <email>wzwyc@yeah.net</email>
	  </author>
	  <category term="" scheme="http://www.cnsos.net/default.asp?cateID=8" label="基础应用" /> 
	  <updated>2009-05-14T23:05:41+08:00</updated>
	  <published>2009-05-14T23:05:41+08:00</published>
		  <summary type="html"><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;也许是因为我提供了不少微软操作系统光盘镜像的缘故，最近一个时期，经常会看到一些网友关于“MSDN”的提问，主要是：“MSDN”到底是干什么的？怎样查找“MSDN”资源下载和相关信息？“MSDN”中的下载和密钥选项为什么是灰色的？“MSDN”校验值能说明什么？怎样检验光盘镜像的校验值？“MSDN”是微软操作系统的一种版本吗？现就这些问题综合答复如下——<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;第一，MSDN是Microsoft Developer Network的缩写。微软“MSDN”网站功能很多。但主要功能是向付费注册用户提供最新产品下载和技术紧急电话支援。就我所知，付费注册用户以软件、硬件制造商为主体，他们要通过“MSDN”提前获取微软相关资源以利自己产品的前期开发。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;第二，到“MSDN”网站查找微软各种资源及其相关信息非常方便：首先，打开“MSDN”网站(<a href="https://msdn.microsoft.com/zh-cn/subscri&#112;tions/securedownloads/default.aspx" target="_blank" rel="external">https://msdn.microsoft.com/zh-cn/subscri&#112;tions/securedownloads/default.aspx</a>)；然后，以“@hotmail.com”邮箱进行注册；最后，在菜单中“选择一种产品”和“媒体类型、语言、体系结构类型”即可。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;第三，作为普通注册用户，大家可以非常方便地查看“某一产品”的文件名、邮寄日期和相关校验值，但是不能下载相关资源也不会得到相关密钥。“MSDN”中“下载”和“密钥”选项为什么是灰色的？原因不言自明：你还没有“掏银子”，因此“MSDN”拒绝访问。其实，有些我已作了提供。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;第四，“MSDN”校验值主要有两项：SHAI和ISO/CRC。其中，SHAI是最重要的。SHA1是由美国标准技术局（NIST）颁布的国家标准。它是一种应用最为广泛的hash函数算法，也是目前最先进的加密技术，被政府部门和企业用来处理敏感信息。SHAI校验值具有全球唯一特性。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;第五，为了校验下载的光盘镜像是否与“MSDN”校验值相一致，选取一款“计算绝对准确”的校验工具是十分必要的。以我多年实践，提供以下两款：提请大家必备的“万用”数字“指纹”校验器—— Hasher 和 HashCalc （下载）。只要验证一致，必属原版无疑。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;第六，诸如家庭版、专业版、旗舰版，是Microsoft Windows各个系列的版本规范名称。“MSDN”与“零售”“VOL”一样，不是微软操作系统的版本分类。严格讲，它是某种发布渠道和提供方式的“代称”。有些操作系统下载冠之以“MSDN”，主要说明这是微软原版光盘镜像。<br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.cnsos.net/article.asp?id=163" /> 
	  <id>http://www.cnsos.net/default.asp?id=163</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[堆内存和栈内存的划分[C++][内存管理][转载] ]]></title>
	  <author>
		 <name>aci</name>
		 <uri>http://www.cnsos.net/</uri>
		 <email>wzwyc@yeah.net</email>
	  </author>
	  <category term="" scheme="http://www.cnsos.net/default.asp?cateID=6" label="编程开发" /> 
	  <updated>2009-05-13T17:04:32+08:00</updated>
	  <published>2009-05-13T17:04:32+08:00</published>
		  <summary type="html"><![CDATA[<p><strong><font color="#ff0000">一. 在c中分为这几个存储区<br />
</font></strong>1.栈 - 由编译器自动分配释放<br />
2.堆 - 一般由程序员分配释放，若程序员不释放，程序结束时可能由OS回收<br />
3.全局区（静态区），全局变量和静态变量的存储是放在一块的，初始化的全局变量和静态变量在一块区域，未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。- 程序结束释放<br />
4.另外还有一个专门放常量的地方。- 程序结束释放<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
在函数体中定义的变量通常是在栈上，用malloc, calloc, realloc等分配内存的函数分配得到的就是在堆上。在所有函数体外定义的是全局量，加了static修饰符后不管在哪里都存放在全局区（静态区）,在所有函数体外定义的static变量表示在该文件中有效，不能extern到别的文件用，在函数体内定义的static表示只在该函数体内有效。另外，函数中的&quot;adgfdf&quot;这样的字符串存放在常量区。比如：<br />
&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;a&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">全局初始化区</span><span style="color: #008000"><br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">p1;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">全局未初始化区</span><span style="color: #008000"><br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main()<br />
<img id="Codehighlighter1_52_361_Open_Image" alt="" align="top" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_52_361_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_52_361_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_52_361_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" /><img id="Codehighlighter1_52_361_Closed_Image" alt="" align="top" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_52_361_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_52_361_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_52_361_Open_Text').style.display='inline';" style="display: none" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" /></span><span id="Codehighlighter1_52_361_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_52_361_Open_Text"><span style="color: #000000">{<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;b;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">栈</span><span style="color: #008000"><br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;s[]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&quot;</span><span style="color: #000000">abc</span><span style="color: #000000">&quot;</span><span style="color: #000000">;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">栈</span><span style="color: #008000"><br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">p2;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">栈</span><span style="color: #008000"><br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">p3&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&quot;</span><span style="color: #000000">123456</span><span style="color: #000000">&quot;</span><span style="color: #000000">;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">123456{post.content}在常量区，p3在栈上</span><span style="color: #008000"><br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;c&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">全局（静态）初始化区</span><span style="color: #008000"><br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;p1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">)malloc(</span><span style="color: #000000">10</span><span style="color: #000000">);&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">分配得来得10字节的区域在堆区</span><span style="color: #008000"><br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;p2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">)malloc(</span><span style="color: #000000">20</span><span style="color: #000000">);&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">分配得来得20字节的区域在堆区</span><span style="color: #008000"><br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;strcpy(p1,&nbsp;</span><span style="color: #000000">&quot;</span><span style="color: #000000">123456</span><span style="color: #000000">&quot;</span><span style="color: #000000">);<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">123456{post.content}放在常量区，编译器可能会将它与p3所指向的&quot;123456&quot;优化成一块</span><span style="color: #008000"><br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" /></span><span style="color: #000000">}</span></span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /></span></div>
<p><br />
<strong><span style="color: red"><strong>二.在C++中，内存分成5个区，他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区<br />
</strong></span>1.栈，</strong>就是那些由编译器在需要的时候分配，在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。<br />
<strong>2.堆，</strong>就是那些由new分配的内存块，他们的释放编译器不去管，由我们的应用程序去控制，一般一个new就要对应一个delete。如果程序员没有释放掉，那么在程序结束后，操作系统会自动回收。<br />
<strong>3.自由存储区，</strong>就是那些由malloc等分配的内存块，他和堆是十分相似的，不过它是用free来结束自己的生命的。<br />
<strong>4.全局/静态存储区</strong>，全局变量和静态变量被分配到同一块内存中，在以前的C语言中，全局变量又分为初始化的和未初始化的，在C++里面没有这个区分了，他们共同占用同一块内存区。<br />
<strong>5.常量存储区，</strong>这是一块比较特殊的存储区，他们里面存放的是常量，不允许修改（当然，你要通过非正当手段也可以修改）<br />
<br />
<strong style="color: red">三. 谈谈堆与栈的关系与区别<br />
</strong>具体地说，现代计算机(串行执行机制)，都直接在代码底层支持栈的数据结构。这体现在，有专门的寄存器指向栈所在的地址，有专门的机器指令完成数据入栈出栈的操作。这种机制的特点是效率高，支持的数据有限，一般是整数，指针，浮点数等系统直接支持的数据类型，并不直接支持其他的数据结构。因为栈的这种特点，对栈的使用在程序中是非常频繁的。对子程序的调用就是直接利用栈完成的。机器的call指令里隐含了把返回地址推入栈，然后跳转至子程序地址的操作，而子程序中的ret指令则隐含从堆栈中弹出返回地址并跳转之的操作。C/C++中的自动变量是直接利用栈的例子，这也就是为什么当函数返回时，该函数的<strong>自动变量自动失效</strong>的原因。 <br />
<br />
和栈不同，堆的数据结构并不是由系统(无论是机器系统还是操作系统)支持的，而是由函数库提供的。基本的malloc/realloc/free 函数维护了一套内部的堆数据结构。当程序使用这些函数去获得新的内存空间时，这套函数首先试图从内部堆中寻找可用的内存空间，如果没有可以使用的内存空间，则试图利用系统调用来动态增加程序数据段的内存大小，新分配得到的空间首先被组织进内部堆中去，然后再以适当的形式返回给调用者。当程序释放分配的内存空间时，这片内存空间被返回内部堆结构中，可能会被适当的处理(比如和其他空闲空间合并成更大的空闲空间)，以更适合下一次内存分配申请。这套复杂的分配机制实际上相当于一个<strong>内存分配的缓冲池</strong>(Cache)，使用这套机制有如下若干原因：<br />
1. 系统调用可能不支持任意大小的内存分配。有些系统的系统调用只支持固定大小及其倍数的内存请求(按页分配)；这样的话对于大量的小内存分类来说会造成浪费。<br />
2. 系统调用申请内存可能是代价昂贵的。系统调用可能涉及用户态和核心态的转换。<br />
3. 没有管理的内存分配在大量复杂内存的分配释放操作下很容易造成内存碎片。<br />
<br />
<strong>堆和栈的对比<br />
</strong>从以上知识可知，栈是系统提供的功能，特点是快速高效，缺点是有限制，数据不灵活；而栈是函数库提供的功能，特点是灵活方便，数据适应面广泛，但是效率有一定降低。栈是系统数据结构，对于进程/线程是唯一的；堆是函数库内部数据结构，不一定唯一。不同堆分配的内存无法互相操作。栈空间分静态分配和动态分配两种。静态分配是编译器完成的，比如自动变量(auto)的分配。动态分配由alloca函数完成。栈的动态分配无需释放(是自动的)，也就没有释放函数。为可移植的程序起见，栈的动态分配操作是不被鼓励的！堆空间的分配总是动态的，虽然程序结束时所有的数据空间都会被释放回系统，但是精确的申请内存/ 释放内存匹配是良好程序的基本要素。<br />
<br />
&nbsp;&nbsp;&nbsp; 1.碎片问题：对于堆来讲，<strong>频繁的new/delete势必会造成内存空间的不连续，从而造成大量的碎片，使程序效率降低</strong>。对于栈来讲，则不会存在这个问题，因为栈是先进后出的队列，他们是如此的一一对应，以至于永远都不可能有一个内存块从栈中间弹出，在他弹出之前，在他上面的后进的栈内容已经被弹出，详细的可以&gt;参考数据结构，这里我们就不再一一讨论了。<br />
&nbsp;&nbsp;&nbsp; 2.生长方向：对于堆来讲，生长方向是向上的，也就是向着内存地址增加的方向；对于栈来讲，它的生长方向是向下的，是向着内存地址减小的方向增长。<br />
&nbsp;&nbsp;&nbsp; 3.分配方式：堆都是动态分配的，没有静态分配的堆。栈有2种分配方式：静态分配和动态分配。静态分配是编译器完成的，比如局部变量的分配。动态分配由alloca函数进行分配，但是栈的动态分配和堆是不同的，他的动态分配是由编译器进行释放，无需我们手工实现。<br />
&nbsp;&nbsp;&nbsp; 4.分配效率：栈是机器系统提供的数据结构，计算机会在底层对栈提供支持：分配专门的寄存器存放栈的地址，压栈出栈都有专门的指令执行，这就决定了<strong>栈的效率比较高</strong>。堆则是C/C++函数库提供的，它的机制是很复杂的，例如为了分配一块内存，库函数会按照一定的算法（具体的算法可以参考数据结构/操作系统）在堆内存中搜索可用的足够大小的空间，如果没有足够大小的空间（可能是由于内存碎片太多），就有可能调用系统功能去增加程序数据段的内存空间，这样就有机会分到足够大小的内存，然后进行返回。显然，堆的效率比栈要低得多。<br />
<br />
&nbsp;&nbsp;&nbsp; <strong>明确区分堆与栈</strong>:<br />
&nbsp;&nbsp;&nbsp; 在bbs上，堆与栈的区分问题，似乎是一个永恒的话题，由此可见，初学者对此往往是混淆不清的，所以我决定拿他第一个开刀。<br />
&nbsp;&nbsp;&nbsp; 首先，我们举一个例子：<br />
&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;f()<br />
<img id="Codehighlighter1_9_36_Open_Image" alt="" align="top" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_9_36_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_9_36_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_9_36_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" /><img id="Codehighlighter1_9_36_Closed_Image" alt="" align="top" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_9_36_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_9_36_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_9_36_Open_Text').style.display='inline';" style="display: none" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" /></span><span id="Codehighlighter1_9_36_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_9_36_Open_Text"><span style="color: #000000">{&nbsp;<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;p</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">[</span><span style="color: #000000">5</span><span style="color: #000000">];<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /></span></div>
<p>这条短短的一句话就包含了堆与栈，看到new，我们首先就应该想到，我们分配了一块堆内存，那么指针p呢？他分配的是一块栈内存，所以这句话的意思就是：<strong>在栈内存中存放了一个指向一块堆内存的指针p</strong>。在程序会先确定在堆中分配内存的大小，然后调用operator new分配内存，然后返回这块内存的首地址，放入栈中，他在VC6下的汇编代码如下：<br />
&nbsp;&nbsp;&nbsp; 00401028&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 14h<br />
&nbsp;&nbsp;&nbsp; 0040102A&nbsp;&nbsp;&nbsp; call&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; operator new (00401060)<br />
&nbsp;&nbsp;&nbsp; 0040102F&nbsp;&nbsp;&nbsp; add&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;esp,4<br />
&nbsp;&nbsp;&nbsp; 00401032&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dword ptr [ebp-8],eax<br />
&nbsp;&nbsp;&nbsp; 00401035&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eax,dword ptr [ebp-8]<br />
&nbsp;&nbsp;&nbsp; 00401038&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dword ptr [ebp-4],eax<br />
&nbsp;&nbsp;&nbsp; 这里，我们为了简单并没有释放内存，那么该怎么去释放呢？是delete p么？澳，错了，应该是<strong>delete []p</strong>，这是为了告诉编译器：我删除的是一个数组，VC6就会根据相应的Cookie信息去进行释放内存的工作。<br />
&nbsp;&nbsp;&nbsp; 好了，我们回到我们的主题：堆和栈究竟有什么区别？<br />
&nbsp;&nbsp;&nbsp; 主要的区别由以下几点：<br />
&nbsp;&nbsp;&nbsp; 1、管理方式不同；<br />
&nbsp;&nbsp;&nbsp; 2、空间大小不同；<br />
&nbsp;&nbsp;&nbsp; 3、能否产生碎片不同；<br />
&nbsp;&nbsp;&nbsp; 4、生长方向不同；<br />
&nbsp;&nbsp;&nbsp; 5、分配方式不同；<br />
&nbsp;&nbsp;&nbsp; 6、分配效率不同；<br />
&nbsp;&nbsp;&nbsp; 管理方式：对于栈来讲，是由编译器自动管理，无需我们手工控制；对于堆来说，释放工作由程序员控制，容易产生memory leak。<br />
&nbsp;&nbsp;&nbsp; 空间大小：一般来讲在32位系统下，堆内存可以达到4G的空间，从这个角度来看堆内存几乎是没有什么限制的。但是对于栈来讲，一般都是有一定的空间大小的，例如，在VC6下面，默认的栈空间大小是1M（好像是，记不清楚了）。当然，我们可以修改：<br />
&nbsp;&nbsp;&nbsp; 打开工程，依次操作菜单如下：Project-&gt;Setting-&gt;Link，在Category 中选中Output，然后在Reserve中设定堆栈的最大值和commit。<br />
注意：reserve最小值为4Byte；commit是保留在虚拟内存的页文件里面，它设置的较大会使栈开辟较大的值，可能增加内存的开销和启动时间。<br />
&nbsp;&nbsp;&nbsp; 堆和栈相比，由于大量new/delete的使用，容易造成大量的内存碎片；由于没有专门的系统支持，效率很低；由于可能引发用户态和核心态的切换，内存的申请，代价变得更加昂贵。所以栈在程序中是应用最广泛的，就算是函数的调用也利用栈去完成，函数调用过程中的参数，返回地址，EBP和局部变量都采用栈的方式存放。所以，我们推荐大家尽量用栈，而不是用堆。<br />
<br />
另外对存取效率的比较:<br />
代码:<br />
&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;s1[]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&quot;</span><span style="color: #000000">aaaaaaaaaaaaaaa</span><span style="color: #000000">&quot;</span><span style="color: #000000">;<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">s2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&quot;</span><span style="color: #000000">bbbbbbbbbbbbbbbbb</span><span style="color: #000000">&quot;</span><span style="color: #000000">;<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /></span></div>
<p>aaaaaaaaaaa是在运行时刻赋值的；<br />
而bbbbbbbbbbb是在编译时就确定的；<br />
但是，在以后的存取中，<strong>在栈上的数组比指针所指向的字符串(例如堆)快</strong>。<br />
比如：<br />
&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main()<br />
<img id="Codehighlighter1_12_109_Open_Image" alt="" align="top" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_12_109_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_12_109_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_12_109_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" /><img id="Codehighlighter1_12_109_Closed_Image" alt="" align="top" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_12_109_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_12_109_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_12_109_Open_Text').style.display='inline';" style="display: none" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" /></span><span id="Codehighlighter1_12_109_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_12_109_Open_Text"><span style="color: #000000">{<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;a&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;c[]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&quot;</span><span style="color: #000000">1234567890</span><span style="color: #000000">&quot;</span><span style="color: #000000">;<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">p&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&quot;</span><span style="color: #000000">1234567890</span><span style="color: #000000">&quot;</span><span style="color: #000000">;<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;c[</span><span style="color: #000000">1</span><span style="color: #000000">];<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;p[</span><span style="color: #000000">1</span><span style="color: #000000">];<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">;<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span></div>
<p>对应的汇编代码<br />
10: a = c[1];<br />
00401067 8A 4D F1 mov cl,byte ptr [ebp-0Fh]<br />
0040106A 88 4D FC mov byte ptr [ebp-4],cl<br />
11: a = p[1];<br />
0040106D 8B 55 EC mov edx,dword ptr [ebp-14h]<br />
00401070 8A 42 01 mov al,byte ptr [edx+1]<br />
00401073 88 45 FC mov byte ptr [ebp-4],al<br />
第一种在读取时直接就把字符串中的元素读到寄存器cl中，而第二种则要先把指针值读到edx中，在根据edx读取字符，显然慢了.<br />
&nbsp;&nbsp;&nbsp; 无论是堆还是栈，都要防止越界现象的发生（除非你是故意使其越界），因为越界的结果要么是程序崩溃，要么是摧毁程序的堆、栈结构，产生以想不到的结果,就算是在你的程序运行过程中，没有发生上面的问题，你还是要小心，说不定什么时候就崩掉,编写稳定安全的代码才是最重要的</p>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.cnsos.net/article.asp?id=162" /> 
	  <id>http://www.cnsos.net/default.asp?id=162</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[什么是发物？]]></title>
	  <author>
		 <name>aci</name>
		 <uri>http://www.cnsos.net/</uri>
		 <email>wzwyc@yeah.net</email>
	  </author>
	  <category term="" scheme="http://www.cnsos.net/default.asp?cateID=9" label="杂文" /> 
	  <updated>2009-05-13T11:46:17+08:00</updated>
	  <published>2009-05-13T11:46:17+08:00</published>
		  <summary type="html"><![CDATA[中医食疗学认为，不同的食物在性能（偏性）上有差异，尽管都有其可食性和营养功能，但在患病服用中药时期，如果不了解&#34;发物&#34;和不重视&#34;忌口&#34;，饮食不当，则可能引起病变，产生不良反应和副作用。从而加重病情和引起严重后果。《金匾要略·禽兽鱼虫禁忌并治篇》指出&#34;所食之味，有与病相宜，有与身为害。若得宜则益体，害则成疾，以此致危，例皆难疗&#34;。提示不相宜的食物与疾病转归的关系。 <br/>&#34;发物&#34;是指某种疾病的患者，在此期间进食某些不宜食用的食物，亦即能诱发疾病的食物。一般按其性能可分为六类：一为发热之物，如薤、姜、花椒、羊肉、狗肉等；二为发风之物，如虾、蟹、椿芽等；三为发湿之物，如饴糖、糯米、醪糟、米酒等；四为发冷积之物，如梨、柿及各种生冷之品；五为发动血之物，如辣椒、胡椒等；六为发滞气之品，如土豆、莲米、芡实及各类豆制品。 <br/><br/>&#34;忌口&#34;，即是在服用中药期间，为保证其药效，对于某些能减低药物功效并发生副作用的食物禁忌，俗称为&#34;食忌&#34;或&#34;忌口&#34;。 <br/><br/>&#34;发物&#34;致病与人体的体质、遗传、季节、年龄、食后受凉或发怒生气等多种因素有关。如属&#34;热体&#34;者，享用羊肉美味可能成为&#34;发物&#34;，而&#34;寒体&#34;者却可安然无恙；属痰湿肥胖之体者，甜腻膏脂食物皆可能成为&#34;发物&#34;。所以，对发物是否需要忌口的问题，还得按中医的方法&#34;辨证论忌&#34;。如果你形体虚寒，大便溏薄，胃痛喜温，四肢发冷，则西瓜、雪梨、香蕉等凉性食物当忌；如果你近来面目红赤，发热口渴，失眠心烦，痔疮下血，则生姜、胡椒、白酒、大蒜等热性食物当忌；患有荨麻疹、各种皮炎、湿疹、酒渣鼻、痤疮的人，一切具有刺激性食物都可能成为&#34;发物&#34;，需当&#34;忌口&#34;。有的哮喘病人，平时可以无所顾忌地随便吃喝，而在哮喘发作期间，蛋、牛奶、鱼虾等高蛋白食物却成了加重病情的&#34;发物&#34;，理当&#34;忌口&#34;。 <br/><br/>一般来说，凡患热性疾病服药时，应禁用或少食酒类、辣味、鱼类、肉类等食物，因酒、辣味食物性热，鱼肉类有腻生热、生痰作用，食后助长病邪，使病情加重；当服用解表、透疹药时，宜少食生冷及酸味食物，因其有收敛作用，能影响药物解表、透疹功效；服温补药物时，应少饮茶、少食萝卜，因茶叶性凉下气，能降低药物温补脾胃之效能；服清热凉血及滋阴药物时，不宜吃辣物，辣的食物性热，食辣的食物会增加热现象而抵消清热凉血药物（如石膏、银花、连翘、栀子、生地、丹皮等）及滋阴药（如石斛、沙参、麦冬、知母、玄参等）的作用；服用补药人参时，不宜吃萝卜，萝卜有消食化痰、通气的作用，而人参是滋补性药物，这样一补一消，作用就抵消了，无疑浪费了贵重药物人参。 <br/><br/>妇女妊娠期间由于胎儿生长发育的需要，机体的阴血相对不足，而阳气偏盛，因此凡辛热温操之物不宜食用，即所谓&#34;产前宜凉&#34;。若有妊娠恶阻者，则更应忌用油腻、腥臭及不易消化的食物。产后机体常呈虚寒状态，同时多兼见瘀血内停，此时凡属寒凉、酸收、辛燥发散之品均宜&#34;忌口&#34;，故有&#34;产后立温&#34;之说。 <br/><br/>患病期间服用中药，均不能用茶水送服。茶叶汁中含有鞣酸，鞣酸会和药物中的蛋白质、生物碱或重金属盐起化学作用而发生沉淀，影响药物疗效，甚至导致药物失效。茶叶中含有的咖啡碱、茶碱、可可碱等成分，具有强心、利尿、刺激胃酸分泌及兴奋高级神经中枢等作用，所以，贫血病人服铁剂时，以及服镇静、催眠等药物的前后，都不宜喝茶，更不能用茶叶水送服这些药物。 <br/><br/>-----------------------------------------------------------------------------<br/><br/>&#34;发物&#34;是指某种疾病的患者，在此期间进食某些不宜食用的食物，亦即能诱发疾病的食物。 <br/>就是能引起创口发炎的食物。这种说法有一定的道理，因为吃海产品的话，蛋白质摄入量增加，机体的免疫功能增强，对外来物质的排异性增加，创口的反应也就剧烈一些。医学上为了抑制排异反应，要服用激素类药物就是这个道理。 <br/>名医秦伯末在《中医对于病人的膳食问题》中曾说：“凡能引起口干、目赤、牙齿肿胀、大便秘结的荠菜、韭菜、香菇、金花菜等，都有发热的可能，俗称发物。”实质上发物是指摄食某些食物后能引起旧病复发、新病增重的食物。发物的范围很广，有时将荤腥食物都看作发物。一般来说，按照发物的性能分为六大类：一为发热之物，如薤、姜、花椒、胡椒、羊肉、狗肉等；二为发风之物，如虾、蟹、鹅、鸡蛋、椿芽等；三是发湿热之物，如饴糖、糯米、猪肉等；四是发冷积之物，如西瓜、梨、柿等各种生冷之品；五是发动血之物，如海椒、胡椒等；六是发滞气之物，如羊肉、莲子、芡实等。 <br/>很多资料证明，高脂肪与高热最的饮食与乳腺癌发生呈正相关. <br/>据研究表明，癌症的“发物”包括狗肉、公鸡、羊肉、蚕蛹、虾、蟹、螺、蚌、烟、酒等容易动风化火，助湿生痰的食物，一切辛温、煎炸、荤腥、陈腐、发霉之物。周岱翰说，癌病者吃这些食物后虽不至于“每吃必发”，但多数人容易出现食物变态反应，而且某些病人可能对某类食物较为过敏而易“发”，并以此为诱因导致肌体的进一步虚衰。 <br/>美国一研究中心的科研人员经过长期调查研究后发现，女性爱吃烧烤肉容易导致乳腺癌的发生。墨西哥《永久周刊》最新一期援引美国洛瓦妇女健康研究中心的报告说，常吃烧烤肉的女性患乳腺癌的危险性要比不爱吃烤肉的女性高出两倍。尤其是那些少女时代爱吃羊肉串等高温烧烤肉制品的女性，她们成婚或到中年后患乳腺癌的比率明显增高。 <br/>报告在谈到为何女性爱吃烧烤肉容易患乳腺癌的缘由时说，因为肉用高温烧烤、油 炸或火炭烧烤会产生一种叫异常胺(AH)的致癌成分，这些致癌成分在与人体肌肉组织的肌酸和蛋白质中的氨基酸发生作用时能促使癌细胞形成。 <br/>日前，专家对大规模流行病学调查结果显示：每天摄入酒精量超过一杯啤酒（约350毫升）所含酒精的女性，患乳腺癌的危险比从不饮酒的女性高3倍。 <br/>专家说：“大量饮酒可能会使女性雌激素的分泌更加旺盛，而雌激素会刺激乳腺癌细胞的繁殖。”教授们用7年半时间，对居住在该国24个地区的约3.6万名40－79岁的女性进行的跟踪调查显示，在调查期间共有151人患乳腺癌。其中，平均每天摄入酒精15克以上的人数，是从不饮酒人数的2.93倍。由此可知，过量饮酒使女性更易患乳腺癌。一瓶啤酒的酒精含量约为14克。若每天摄入酒精量不足15克，则不会提高患乳腺癌的患病几率。 <br/><br/>女性多吃鱼可降低患乳腺癌的危险。 <br/>每天吃鱼的人和每周吃鱼一至两次以下的人相比，乳腺癌发病低43％。调查还发现，乳腺癌发病率与植物性脂肪摄取量无关。 <br/>很多皮肤病如银屑病，荨麻疹、皮肤瘙痒症、湿疹、神经性皮炎、脂溢性皮炎、痤疮等患者，每每都因食发物后病情加重，病程迁延。 <br/><br/>酒、蛋、鱼、虾、蟹、海带、鸡、鸭、牛羊肉、猪头肉、猪蹄、生葱、生蒜、花椒、辣椒、韭菜、芹菜、巧克力、生菠萝等都是发物。发物中如鸡、蛋类、年头肉等对人体而言为异体蛋白，这种异体蛋白就可构成过敏源而导致人体发病。鱼、虾、蟹类本身就含组织胺，而组织胺可使血管通透性增高、微血管扩张、充血、血浆渗出、水肿、腺体分泌亢进及嗜酸性白细胞增高等，从而导致了机体变态反应，即过敏反应，诱发皮肤病，如出现红斑、丘疹、水疱、发热等。有的高敏病人，甚至对大米、小麦、玉米等都可产生过敏反应。酒、葱、蒜等可通过酒精或挥发刺激物质直接引起皮肤毛细血管扩张、血流加速，使原有的皮肤病病情加重或病情迁延。 <br/>很多发物可诱发或加重皮肤病，但皮肤病患者未必什么发物都不能吃。每个病人对发物反应不完全相同，对哪种发物反应大、强烈，要根据病情去自己总结，然后有针对性地避免食用，不要不加选择地凡发物全不吃。因为好多发物都具有较高的营养，常年什么发物都忌口也会带来营养缺乏，反而影响健康。 <br/>“忌口”是指治病服药时的饮食禁忌。但随着西医不断普及，现代人大都对此开始渐渐陌生。湖南湘雅医院中西医结合研究所李家邦教授说，实践证明，忌口是有一定道理并颇为讲究的。生活中行行色色的食物本身具有各自的性能，对疾病的发生、发展和药物的治疗作用，均会产生一定影响。 <br/><br/>老一辈常常说病人不要吃发物。李家邦教授对此解释说，“发物”是指患了某种疾病的人，在治疗期间不宜食用的食物，亦即能诱发疾患的食物。中医按其性能分为六类：一为发热之物，如薤、姜、花椒、羊肉、狗肉等；二为发风之物，如虾、蟹、椿芽等；三为发湿之物，如饴糖、糯米、醪糟、米酒等；四为发冷积之物，如梨、柿及各种生冷之品；五为发血之物，如辣椒、胡椒等；六为发滞气之品，如土豆、莲米、芡实及各类豆制品。对发物是否需要忌口的问题，还得按中医的方法“辨证论忌”。如果你形体虚寒，大便溏薄，胃痛喜温，四肢发冷，则西瓜、雪梨、香蕉等凉性食物当忌；如果你近来面目红赤，发热口渴，失眠心烦，痔疮下血，则生姜、胡椒、白酒、大蒜等热性食物当忌；患有荨麻疹、各种皮炎、湿疹、酒渣鼻、痤疮的人，一切具有刺激性食物都可能成为“发物”，需当“忌口”。有的哮喘病人，平时可以无所顾忌地随便吃、随便喝，而在哮喘发作期间，蛋、牛奶、鱼虾等高蛋白食物却成了加重病情的“发物”，理当“忌口”。所以患者在看病时可以适当地向医生咨询这方面的问题，更好的防病治病。]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.cnsos.net/article.asp?id=161" /> 
	  <id>http://www.cnsos.net/default.asp?id=161</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[把UltraEdit加入到右键菜单中]]></title>
	  <author>
		 <name>aci</name>
		 <uri>http://www.cnsos.net/</uri>
		 <email>wzwyc@yeah.net</email>
	  </author>
	  <category term="" scheme="http://www.cnsos.net/default.asp?cateID=8" label="基础应用" /> 
	  <updated>2009-05-11T19:40:06+08:00</updated>
	  <published>2009-05-11T19:40:06+08:00</published>
		  <summary type="html"><![CDATA[UltraEdit安装好之后，拷贝到其它机器就可以直接使用而无需注册，但少了一个功能，就是无法选择某个文本文件用右键选择UltraEdit打开，很不方便，仔细查看注册表，发现把下面内容加入注册表即可：<br/><br/>Windows Registry Editor Version 5.00 <br/>[HKEY_CLASSES_ROOT\*\shell] <br/>[HKEY_CLASSES_ROOT\*\shell\UltraEdit] <br/>@=&#34;UltraEdit-32&#34; <br/>[HKEY_CLASSES_ROOT\*\shell\UltraEdit\Command] <br/>@=&#34;D:\\temp\\uedit32.exe %1&#34; <br/>其中D:\\temp\\uedit32.exe 为UltraEdit的绝对位置，把这些内容修改成UltraEdit所在的正确位置，把上述内容放在一个叫XX.reg的文件，双击即可安装成功。<br/><br/>但这样也不方便，因为不同的环境，都要修改最后一行，难道没有好办法了吗？有，看下面：<br/><br/>@echo off<br/>echo Windows Registry Editor Version 5.00&gt; tmp.reg <br/>echo [HKEY_CLASSES_ROOT\*\shell]&gt;&gt; tmp.reg <br/>echo [HKEY_CLASSES_ROOT\*\shell\UltraEdit]&gt;&gt; tmp.reg <br/>echo @=&#34;UltraEdit-32&#34;&gt;&gt; tmp.reg <br/>echo [HKEY_CLASSES_ROOT\*\shell\UltraEdit\Command]&gt;&gt; tmp.reg <br/>set str=%cd%<br/>echo @=&#34;%str:\=\\%\\uedit32.exe %%1&#34;&gt;&gt; tmp.reg <br/>echo *=========================================================================*<br/>echo *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *<br/>echo *&nbsp;&nbsp; 正在将生成的注册信息写入注册表，请点击“是”键钮！&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *<br/>echo *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *<br/>echo *=========================================================================*<br/>tmp.reg<br/>del tmp.reg<br/><br/>上面是一个批处理文件代码，主要功能是动态生成uedit32.exe 所在路径（当前文件夹），并把这些内容写入一个叫tmp.reg的文件，然后执行，执行完后立即删除。注意：要在uedit32.exe 所在的路径下执行这个批处理。<br/><br/>转自：<a href="http://wenxuecn.blog.163.com/blog/static/2208345200711365538740/" target="_blank" rel="external">http://wenxuecn.blog.163.com/blog/static/2208345200711365538740/</a>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.cnsos.net/article.asp?id=160" /> 
	  <id>http://www.cnsos.net/default.asp?id=160</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[Win7专用Virtual PC（虚拟XP模式）下载]]></title>
	  <author>
		 <name>aci</name>
		 <uri>http://www.cnsos.net/</uri>
		 <email>wzwyc@yeah.net</email>
	  </author>
	  <category term="" scheme="http://www.cnsos.net/default.asp?cateID=7" label="软件下载" /> 
	  <updated>2009-05-01T07:19:17+08:00</updated>
	  <published>2009-05-01T07:19:17+08:00</published>
		  <summary type="html"><![CDATA[<p>前几天我们报道了Windows 7 RC的重头戏虚拟XP模式，也就是说能够在Windows 7中原生运行XP程序。这对抱怨Windows 7兼容性问题的朋友应该是个很消息，不过要求的计算机配置稍微偏高，需要2G内存。话不多说，请看由景友System32为我们带来的安装截图。</p>
<p>&nbsp;</p>
<center><img border="0" alt="" src="http://www.win7x.com/uploads/090430/2_134007_1.jpg" width="561" height="396" /><br />
图片1</center><center></center><center><br />
<img border="0" alt="" src="http://www.win7x.com/uploads/090430/2_134007_2.jpg" width="561" height="396" /><br />
图片2</center><center></center><center><br />
<img border="0" alt="" src="http://www.win7x.com/uploads/090430/2_134007_3.jpg" width="561" height="396" /><br />
图片3</center><center></center><center></center><center><br />
<img border="0" alt="" src="http://www.win7x.com/uploads/090430/2_134007_4.jpg" width="435" height="235" /><br />
图片4</center><center></center><center><br />
<img border="0" alt="" src="http://www.win7x.com/uploads/090430/2_134007_5.jpg" width="366" height="168" /><br />
图片5</center>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>本地下载：</strong><a href="http://www.win7x.com/uploads/soft/200904/2_30135056.rar" target="_blank"><u>Virtual_PC_for_Windows_7_x86-x64.rar</u></a></p>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.cnsos.net/article.asp?id=159" /> 
	  <id>http://www.cnsos.net/default.asp?id=159</id>
  </entry>	
		
</feed>
