<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Little Mouse Walking with Little Rabbit &#187; sgi STL</title>
	<atom:link href="http://www.mousefire.net/tag/sgi-stl/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mousefire.net</link>
	<description>点点滴滴</description>
	<lastBuildDate>Sat, 31 Dec 2011 13:54:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Windows 下C++ 学习平台的选择</title>
		<link>http://www.mousefire.net/2009/12/24/windows-%e4%b8%8bc-%e5%ad%a6%e4%b9%a0%e5%b9%b3%e5%8f%b0%e7%9a%84%e9%80%89%e6%8b%a9/</link>
		<comments>http://www.mousefire.net/2009/12/24/windows-%e4%b8%8bc-%e5%ad%a6%e4%b9%a0%e5%b9%b3%e5%8f%b0%e7%9a%84%e9%80%89%e6%8b%a9/#comments</comments>
		<pubDate>Thu, 24 Dec 2009 03:26:40 +0000</pubDate>
		<dc:creator>Little Mouse</dc:creator>
				<category><![CDATA[学海无涯]]></category>
		<category><![CDATA[漫谈]]></category>
		<category><![CDATA[boost]]></category>
		<category><![CDATA[sgi STL]]></category>
		<category><![CDATA[vs2008]]></category>

		<guid isPermaLink="false">http://www.mousefire.net/2009/12/24/windows-%e4%b8%8bc-%e5%ad%a6%e4%b9%a0%e5%b9%b3%e5%8f%b0%e7%9a%84%e9%80%89%e6%8b%a9/</guid>
		<description><![CDATA[　　对于大多数人来说，计算机只是一个工具，作为一个工科大学生，我不是程序员，但也有很多用得着程序的地方，一个良好的平台，对学习无疑能起到极大的促进作用。 一、为什么选择C++ 　　之所以选择C++，是因为在科研方面，C++有许多已经很成熟的库，也有许多前人的工作可以借鉴，尽管其本身的学习要难些，但资料很多，遇到问题也不难在google上得到答案，而且C++程序的效率比较高。写程序的效率方面，不拘泥于C风格，适应起STL风格的编程，也还是比较高的。 二、IDE 　　选定了语言，就要选具体的开发平台了，不像国外，国内还是windows当道，机子配置低的可以选择eclipse，还可以的可以选择vs2008（普通双核就很ok了，没有传说中的那么夸张），但是msvc编译器这玩意还是有很大的优化余地的，在这里选择了用SGI STL库取代其自带的库，同时试用了Intel C++编译器11.1版本。原因很简单，SGI STL的效率比自带库高得多了，Intel编译器才颇有独到之处，请看下文。 三、STL库的选择 　　我借用 C++ Primer测试string和C风格字符串的一段程序作了测试，源代码如下： #include &#60;ctime&#62; #include &#60;string&#62; #include &#60;iostream&#62; #include &#60;cmath&#62; using namespace std; int main(int argc,char *argv[]) { clock_t StartClock,EndClock; const int LoopTimes=5000000; for (int i=0;i&#60;1000;i++) { &#160;&#160;&#160; sin(5.0); } StartClock=clock(); //C-style code const char *pc=”a very long literal string”; const size_t len=strlen(pc); for (size_t [...]]]></description>
			<content:encoded><![CDATA[<p>　　对于大多数人来说，计算机只是一个工具，作为一个工科大学生，我不是程序员，但也有很多用得着程序的地方，一个良好的平台，对学习无疑能起到极大的促进作用。</p>
<h5>一、为什么选择C++</h5>
<p>　　之所以选择C++，是因为在科研方面，C++有许多已经很成熟的库，也有许多前人的工作可以借鉴，尽管其本身的学习要难些，但资料很多，遇到问题也不难在google上得到答案，而且C++程序的效率比较高。写程序的效率方面，不拘泥于C风格，适应起STL风格的编程，也还是比较高的。</p>
<h5>二、IDE</h5>
<p>　　选定了语言，就要选具体的开发平台了，不像国外，国内还是windows当道，机子配置低的可以选择eclipse，还可以的可以选择vs2008（普通双核就很ok了，没有传说中的那么夸张），但是msvc编译器这玩意还是有很大的优化余地的，在这里选择了用SGI STL库取代其自带的库，同时试用了Intel C++编译器11.1版本。原因很简单，SGI STL的效率比自带库高得多了，Intel编译器才颇有独到之处，请看下文。</p>
<h5>三、STL库的选择</h5>
<p>　　我借用 C++ Primer测试string和C风格字符串的一段程序作了测试，源代码如下：</p>
<p>#include &lt;ctime&gt;</p>
<p>#include &lt;string&gt;</p>
<p>#include &lt;iostream&gt;</p>
<p>#include &lt;cmath&gt;</p>
<p>using namespace std;</p>
<p>int main(int argc,char *argv[])</p>
<p>{</p>
<blockquote><p>clock_t StartClock,EndClock;</p>
<p>const int LoopTimes=5000000;</p>
<p>for (int i=0;i&lt;1000;i++)</p>
<p>{</p>
<p>&nbsp;&nbsp;&nbsp; sin(5.0);</p>
<p>}</p>
<p>StartClock=clock();</p>
<p>//C-style code</p>
<p>const char *pc=”a very long literal string”;</p>
<p>const size_t len=strlen(pc);</p>
<p>for (size_t ix=0;ix!=LoopTimes;ix++)</p>
<p>{</p>
<p>&nbsp;&nbsp;&nbsp; char *pc2=new char[len+1];</p>
<p>&nbsp;&nbsp;&nbsp; strcpy(pc2,pc);</p>
<p>&nbsp;&nbsp;&nbsp; if (strcmp(pc2,pc))</p>
<p>&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout&lt;&lt;”error”&lt;&lt;endl;</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; delete [] pc2;</p>
<p>}</p>
<p>EndClock=clock();</p>
<p>double DurationTime1=static_cast&lt;double&gt;(EndClock-StartClock)/CLOCKS_PER_SEC;</p>
<p>StartClock=clock();</p>
<p>//string-style code</p>
<p>string str(“a very long literal string”);</p>
<p>for (string::size_type ix=0;ix!=LoopTimes;++ix)</p>
<p>{</p>
<p>&nbsp;&nbsp;&nbsp; string str2=str;</p>
<p>&nbsp;&nbsp;&nbsp; if (str2!=str)</p>
<p>&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout&lt;&lt;”error”&lt;&lt;endl;</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>}</p>
<p>EndClock=clock();</p>
<p>double DurationTime2=static_cast&lt;double&gt;(EndClock-StartClock)/CLOCKS_PER_SEC;</p>
<p>cout&lt;&lt;”C-style: “&lt;&lt;DurationTime1&lt;&lt;” s.”&lt;&lt;endl;</p>
<p>cout&lt;&lt;”String-style: “&lt;&lt;DurationTime2&lt;&lt;” s.”&lt;&lt;endl;</p>
<p>return 0;</p>
</blockquote>
<p>}</p>
<p>测试平台：</p>
<blockquote><p>CPU：Intel Q9550</p>
<p>内存：4G</p>
<p>系统：Windows 7 ultimate x64</p>
</blockquote>
<p>测试的结果如下：</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="189">
<p>编译平台</p>
</td>
<td valign="top" width="189">
<p>C风格</p>
</td>
<td valign="top" width="189">
<p>string</p>
</td>
</tr>
<tr>
<td valign="top" width="189">
<p>Intel 11.1 x86(VS STL)</p>
</td>
<td valign="top" width="189">
<p>0.579</p>
</td>
<td valign="top" width="189">
<p>0.888</p>
</td>
</tr>
<tr>
<td valign="top" width="189">
<p>Intel 11.1 x86(SGI STL)</p>
</td>
<td valign="top" width="189">
<p>0.579</p>
</td>
<td valign="top" width="189">
<p>0.340</p>
</td>
</tr>
<tr>
<td valign="top" width="189">
<p>Intel 11.1 x64(VS STL)</p>
</td>
<td valign="top" width="189">
<p>0.399</p>
</td>
<td valign="top" width="189">
<p>0.530</p>
</td>
</tr>
<tr>
<td valign="top" width="189">
<p>Intel 11.1 x64(SGI STL)</p>
</td>
<td valign="top" width="189">
<p>0.422</p>
</td>
<td valign="top" width="189">
<p>0.073</p>
</td>
</tr>
<tr>
<td valign="top" width="189">
<p>MSVC9 x86(VS STL)</p>
</td>
<td valign="top" width="189">
<p>0.578</p>
</td>
<td valign="top" width="189">
<p>0.967</p>
</td>
</tr>
<tr>
<td valign="top" width="189">
<p>MSVC9 x86(SGI STL)</p>
</td>
<td valign="top" width="189">
<p>0.585</p>
</td>
<td valign="top" width="189">
<p>0.345</p>
</td>
</tr>
<tr>
<td valign="top" width="189">
<p>MSVC9 x64(VS STL)</p>
</td>
<td valign="top" width="189">
<p>0.559</p>
</td>
<td valign="top" width="189">
<p>0.559</p>
</td>
</tr>
<tr>
<td valign="top" width="189">
<p>MSVC9 x64(SGI STL)</p>
</td>
<td valign="top" width="189">
<p>0.567</p>
</td>
<td valign="top" width="189">
<p>0.102</p>
</td>
</tr>
<tr>
<td valign="top" width="189">
<p>MinGW with GCC4.4 x86</p>
</td>
<td valign="top" width="189">
<p>1.573</p>
</td>
<td valign="top" width="189">
<p>0.208</p>
</td>
</tr>
<tr>
<td valign="top" width="189">
<p>MSVC10 x86(VS STL)</p>
</td>
<td valign="top" width="189">
<p>0.521</p>
</td>
<td valign="top" width="189">
<p>0.554</p>
</td>
</tr>
<tr>
<td valign="top" width="189">
<p>MSVC10 x64(VS STL)</p>
</td>
<td valign="top" width="189">
<p>0.550</p>
</td>
<td valign="top" width="189">
<p>0.430</p>
</td>
</tr>
</tbody>
</table>
<p>　　很明显，VS STL没有达到Lipman描述的超过C风格的效率，而SGI STL则可以，测试中32位平台效率最高的是GCC4.4，这也是一个优秀的编译器，不过还是在Linux下用起来比较顺当。另外64位平台明显比32位快，对速度比较敏感的项目可以考虑迁移平台了。</p>
<h5>四、boost库</h5>
<p>　　boost库又被称为未来的标准库，其中包括已经纳入tr1甚至即将发布的c++ 0x标准中的库，lambda表达式等新鲜东西不光适合尝鲜，也很有益于开发效率，也是我下一步将要学习的大头之一。</p>
<h5>五、Qt</h5>
<p>　　选择它的原因很简单，相比较于MFC，它实在是好学得多了，我不是程序员，我只是想要用一个简单的界面表达我想要达到的功能，也许C#+Windows Form会更简单，但是我真的懒得再多学一门语言，也不擅长混合编程。</p>
<h5>六、后记</h5>
<p>　　补遗一下，Visual Studio 2008下有个很好用的工具，就是大名鼎鼎的Visual Assist了，番茄很好吃，也是我偏爱这个IDE的很大原因之一，对我来说，傻瓜又好用才是王道。</p>
<p>　　下一次该要记录的，就是这个平台的搭建了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mousefire.net/2009/12/24/windows-%e4%b8%8bc-%e5%ad%a6%e4%b9%a0%e5%b9%b3%e5%8f%b0%e7%9a%84%e9%80%89%e6%8b%a9/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

