﻿<?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++博客-Lyt-最新评论</title><link>http://www.cppblog.com/Lyt/CommentsRSS.aspx</link><description /><language>zh-cn</language><pubDate>Fri, 14 May 2010 08:47:49 GMT</pubDate><lastBuildDate>Fri, 14 May 2010 08:47:49 GMT</lastBuildDate><generator>cnblogs</generator><item><title>re: 稚嫩版垃圾收集器 之 未解决的问题</title><link>http://www.cppblog.com/Lyt/archive/2010/05/14/115359.html#115404</link><dc:creator>Lyt</dc:creator><author>Lyt</author><pubDate>Fri, 14 May 2010 14:03:00 GMT</pubDate><guid>http://www.cppblog.com/Lyt/archive/2010/05/14/115359.html#115404</guid><description><![CDATA[@陈昱(CY)<br>看懂，我在实现对象池的时候就是用类似的算法。<img src ="http://www.cppblog.com/Lyt/aggbug/115404.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lyt/" target="_blank">Lyt</a> 2010-05-14 22:03 <a href="http://www.cppblog.com/Lyt/archive/2010/05/14/115359.html#115404#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 稚嫩版垃圾收集器 之 未解决的问题</title><link>http://www.cppblog.com/Lyt/archive/2010/05/14/115359.html#115392</link><dc:creator>陈昱(CY)</dc:creator><author>陈昱(CY)</author><pubDate>Fri, 14 May 2010 10:09:00 GMT</pubDate><guid>http://www.cppblog.com/Lyt/archive/2010/05/14/115359.html#115392</guid><description><![CDATA[如果SmallObject最大大小并不是很大的话~~也许可以根据对象大小弄成多个SmallObjectHeap。<br><br>比如对象大小是2，就放在SmallObjectHeap2，<br>对象大小是4，就放在SmallObjectHeap4，<br>对象大小是8，就放在SmallObjectHeap8.......<br><br>这样就可以省去内存缩并的工作。只有当Heap不够大时，才扩大内存。<br><br>不用执行碎片的方法（参考python的实现）：<br>struct BlockN<br>{<br>BlockN* m_Free;<br>char data[N];//大小为N的对象数据<br>}；<br>class SmallObjectHeapN<br>{<br>BlockN m_Blocks[size];<br>BlockN* m_NextFree;<br>};<br>SmallObjectHeapN的类里面有一个指向空闲地址的指针m_NextFree，每个BlockN也有一个指向空闲地址的指针m_Free（初始化成0），<br>在一开始的时候SmallObjectHeapN的m_NextFree肯定指向m_Blocks的地址；<br>添加的时候，发现m_NextFree所在的block里面的m_Free是0，于是++m_NextFree；<br>某个block删除的时候，m_Free=m_NextFree，而m_NextFree指向这个被删除的block；<br>再次添加对象时，发现m_NextFree指向的block里面的m_Free不是0，则添加完成后，m_NextFree=block-&gt;m_Free就行了。<img src ="http://www.cppblog.com/Lyt/aggbug/115392.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lyt/" target="_blank">陈昱(CY)</a> 2010-05-14 18:09 <a href="http://www.cppblog.com/Lyt/archive/2010/05/14/115359.html#115392#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 稚嫩版垃圾收集器 之 具体实现（二）</title><link>http://www.cppblog.com/Lyt/archive/2010/05/14/115378.html#115383</link><dc:creator>Lyt</dc:creator><author>Lyt</author><pubDate>Fri, 14 May 2010 08:49:00 GMT</pubDate><guid>http://www.cppblog.com/Lyt/archive/2010/05/14/115378.html#115383</guid><description><![CDATA[@Any<br>Microsoft Office Word 2007<img src ="http://www.cppblog.com/Lyt/aggbug/115383.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lyt/" target="_blank">Lyt</a> 2010-05-14 16:49 <a href="http://www.cppblog.com/Lyt/archive/2010/05/14/115378.html#115383#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 稚嫩版垃圾收集器 之 具体实现（二）</title><link>http://www.cppblog.com/Lyt/archive/2010/05/14/115378.html#115382</link><dc:creator>Any</dc:creator><author>Any</author><pubDate>Fri, 14 May 2010 08:47:00 GMT</pubDate><guid>http://www.cppblog.com/Lyt/archive/2010/05/14/115378.html#115382</guid><description><![CDATA[文中图用什么画的？ 可否相告？<img src ="http://www.cppblog.com/Lyt/aggbug/115382.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lyt/" target="_blank">Any</a> 2010-05-14 16:47 <a href="http://www.cppblog.com/Lyt/archive/2010/05/14/115378.html#115382#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 稚嫩版垃圾收集器 之 具体实现（一）</title><link>http://www.cppblog.com/Lyt/archive/2010/05/14/115365.html#115379</link><dc:creator>Lyt</dc:creator><author>Lyt</author><pubDate>Fri, 14 May 2010 08:39:00 GMT</pubDate><guid>http://www.cppblog.com/Lyt/archive/2010/05/14/115365.html#115379</guid><description><![CDATA[@陈梓瀚(vczh)<br>Generation不够大就开始垃圾收集了，把存活对象提升到更高的Generation，如果内存还是不够，我就抛出异常了。<br>Geneation的大小一开始就折腾成固定的，不知道要根据什么规律把它弄成活的才合适。<br>你的意思是让我把Heap指针放到Generation里？<img src ="http://www.cppblog.com/Lyt/aggbug/115379.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lyt/" target="_blank">Lyt</a> 2010-05-14 16:39 <a href="http://www.cppblog.com/Lyt/archive/2010/05/14/115365.html#115379#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 稚嫩版垃圾收集器 之 具体实现（一）</title><link>http://www.cppblog.com/Lyt/archive/2010/05/14/115365.html#115375</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Fri, 14 May 2010 08:04:00 GMT</pubDate><guid>http://www.cppblog.com/Lyt/archive/2010/05/14/115365.html#115375</guid><description><![CDATA[万一你的generation不够大，决定再次申请一个更大的Data的时候，你的Handle里面的Data岂不是变不了了？你应该把一个Heap的指针放进去才是。<img src ="http://www.cppblog.com/Lyt/aggbug/115375.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lyt/" target="_blank">陈梓瀚(vczh)</a> 2010-05-14 16:04 <a href="http://www.cppblog.com/Lyt/archive/2010/05/14/115365.html#115375#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 稚嫩版垃圾收集器 之 工作机制</title><link>http://www.cppblog.com/Lyt/archive/2010/05/14/115321.html#115368</link><dc:creator>Lyt</dc:creator><author>Lyt</author><pubDate>Fri, 14 May 2010 07:02:00 GMT</pubDate><guid>http://www.cppblog.com/Lyt/archive/2010/05/14/115321.html#115368</guid><description><![CDATA[@陈昱(CY)<br>暂时我只是等到内存耗尽了再收集，那个“阈值”跟“年老对象”的数量成比例具体该怎么折腾心理还没谱。<img src ="http://www.cppblog.com/Lyt/aggbug/115368.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lyt/" target="_blank">Lyt</a> 2010-05-14 15:02 <a href="http://www.cppblog.com/Lyt/archive/2010/05/14/115321.html#115368#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 稚嫩版垃圾收集器 之 工作机制</title><link>http://www.cppblog.com/Lyt/archive/2010/05/14/115321.html#115366</link><dc:creator>陈昱(CY)</dc:creator><author>陈昱(CY)</author><pubDate>Fri, 14 May 2010 06:50:00 GMT</pubDate><guid>http://www.cppblog.com/Lyt/archive/2010/05/14/115321.html#115366</guid><description><![CDATA[学习了。<br>内存池整理时机的那个“阈值”弄成动态的，和“年老的对象”的数量成比例，效率应该比较好，纯猜测....<img src ="http://www.cppblog.com/Lyt/aggbug/115366.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lyt/" target="_blank">陈昱(CY)</a> 2010-05-14 14:50 <a href="http://www.cppblog.com/Lyt/archive/2010/05/14/115321.html#115366#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: Dictionary的囧状</title><link>http://www.cppblog.com/Lyt/archive/2009/10/15/98646.html#98733</link><dc:creator>OwnWaterloo</dc:creator><author>OwnWaterloo</author><pubDate>Thu, 15 Oct 2009 15:14:00 GMT</pubDate><guid>http://www.cppblog.com/Lyt/archive/2009/10/15/98646.html#98733</guid><description><![CDATA[C#的template能做什么我不太清楚。<br><br>C++支持编译时的ducking type机制。<br>抛弃这种强大的抽象机制不用， 转而在C++这种暂不提供GC的语言中使用接口来作为数据结构之间的纽带 …… <br>所以……  我说这不是C++的style ……<br><br>还有一些小地方。 比如main 的返回类型是int， 而不是C#中的void。<br>以单下划线接大写字母开头，以及以双下划线开头的标识符在C++中是被保留的。<br>最好不要将C#中的那些习惯带到C++中来……<br>用Type, Type_, 别用_Type。<br><br>这些被保留的标识符不会被永远保留。 _Bool, _LongLong, _Complex已经出现。<br><br><br><br><a target="_new" href="http://www.cppblog.com/Streamlet/">http://www.cppblog.com/Streamlet/</a><br>这位同学， 和你在做类似的事情， 也遇到了类似的问题。<br>你可以参考参考……<img src ="http://www.cppblog.com/Lyt/aggbug/98733.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lyt/" target="_blank">OwnWaterloo</a> 2009-10-15 23:14 <a href="http://www.cppblog.com/Lyt/archive/2009/10/15/98646.html#98733#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: Dictionary的囧状</title><link>http://www.cppblog.com/Lyt/archive/2009/10/15/98646.html#98729</link><dc:creator>OwnWaterloo</dc:creator><author>OwnWaterloo</author><pubDate>Thu, 15 Oct 2009 14:52:00 GMT</pubDate><guid>http://www.cppblog.com/Lyt/archive/2009/10/15/98646.html#98729</guid><description><![CDATA[<div>我说具体一点吧&#8230;&#8230;</div>
<div>如果用GP(代码一切从简)：</div>
<div>&nbsp;</div>
<div>template&lt;typename T&gt;</div>
<div>class /*array*/list {</div>
<div>&nbsp;&nbsp;&nbsp; T *first,*last_;</div>
<div>public:</div>
<div>&nbsp;&nbsp;&nbsp; typedef T* iterator;</div>
<div>&nbsp;&nbsp;&nbsp; typedef const T* const_iterator;</div>
<div>&nbsp;</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;iterator begin() {&nbsp;return first_;&nbsp;}</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;iterator end() {&nbsp;return last_;&nbsp;}</div>
<div>&nbsp;&nbsp;&nbsp; const_iterator begin() const {&nbsp;return first_;&nbsp;}</div>
<div>&nbsp;&nbsp;&nbsp; const_iterator end() const {&nbsp;return last_;&nbsp;}&nbsp;</div>
<div>&nbsp;&nbsp;&nbsp; // ...</div>
<div>};</div>
<div>&nbsp;</div>
<div>要迭代一个容器：</div>
<div>list&lt;int&gt; l;</div>
<div>for ( list&lt;int&gt;::iterator first = l.begin(), last = l.end(), first!=last; ++first)</div>
<div>&nbsp;&nbsp;&nbsp; <em>visit_element</em>( *first );</div>
<div>&nbsp;</div>
<div>而你遇到的问题就是：</div>
<div>list&lt;pair&lt;key,value&gt; &gt; d; </div>
<div>如何得到一个迭代器， 仅仅访问key部分， 而不访问value部分。</div>
<div>&nbsp;</div>
<div>template&lt;class It&gt;</div>
<div>class project_first {</div>
<div>&nbsp;&nbsp;&nbsp; It it_;</div>
<div>public:</div>
<div>&nbsp;&nbsp;&nbsp; project_first( It it ) : it_(it) {}</div>
<div>&nbsp;&nbsp;&nbsp; typename std::iterator_traits&lt;It&gt;::value_type::first_type&amp;</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; operator*() const { return it-&gt;first;&nbsp;}</div>
<div>&nbsp;&nbsp;&nbsp; // 再实现 ++, -- +n 等操作...</div>
<div>};</div>
<div>&nbsp;</div>
<div>for ( project_first first = d.begin(), last = d.end(); first!=last; ++first)</div>
<div>&nbsp;&nbsp;&nbsp; <em>visit_key</em>( *first );</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>如果d是 list&lt;tuple&lt;key,value&gt; &gt; 类型， project_iterator还可以做得更范化一些。</div>
<div>&nbsp;</div>
<div>没有虚函数调用，没有动态内存分配。</div>
<div>并且，和stl的算法，boost的算法，以及其他C++组件合作良好。</div>
<img src ="http://www.cppblog.com/Lyt/aggbug/98729.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lyt/" target="_blank">OwnWaterloo</a> 2009-10-15 22:52 <a href="http://www.cppblog.com/Lyt/archive/2009/10/15/98646.html#98729#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>