- 博客(15)
- 收藏
- 关注
原创 为啥是imp_xxxx
前面写过碰到的链接问题[url]http://silconfuse.iteye.com/blog/491830[/url],当时写的应该是错误的,从dll中import的函数并不是改名为imp_xxx,这个imp_xxx是指向函数地址的地址。 比如从dll输入一个函数func,调用func时,那么生成的汇编应该是[code="c"]DWROD __imp_fu...
2010-07-24 21:06:11
331
原创 局部变量的匈牙利命名法
今天被同事发现一个编程错误,一个局部变量,因为将其指针传递了太多层,里面已经搞不清,把它当成堆的变量进行cache,幸好他眼尖,避免了这一严重的bug。 不过今后应该如何避免这一问题呢。我首先想到的是,以后如果是栈上的变量向下传,就传引用,如果是堆上的变量向下传,就传指针。不过这一想法还不行,因为有时候是在一个framework里做,或者和别人的代码一起协作,人家的代码可能并...
2010-06-12 14:32:09
332
原创 这次设计的两个教训
1. 一种类型的数据在系统中只应该有一种表示方法,如果表示法多于一种,而且互相之间转换不那么方便,就等着吃苦头吧。2. 流程上的很重要的一点,如果设计时有难点,不应该把它推后,而是应该早早地就想清楚,推后的结果是有可能为了搞定这个难点,而要大规模修改其它已经完成的部分。...
2010-06-10 22:40:58
127
原创 阅读必须系统化,表达不妨碎片化
我觉得我这样的故事算是典型,每天google reader里有无数未读项目,buzz和twitter上有不少更新,有时候还上技术论坛。不过我很少发言。我订阅了很多牛人的blog,buzz和twitter上也有follow了很多牛人,每天看这些所谓“牛人”的发言就花了很多的时间,但是我还不觉得这个是浪费,反而有种在“学习”的错觉。 实际上呢,我觉得我这几年进步很小,小到让人难堪的地...
2010-06-09 21:43:50
215
原创 翻译一份lex & yacc教程,希望不要烂尾
译者按:打算翻译一份lex& yacc教程,每天一点点,这个是原文的第一部分,介绍。1. 介绍 直到1975年,写一个编译器还是一个非常耗时的里程。然后Lesk和Johnson发布了关于lex和yacc的论文。这些工具极大地简化了编译器的构造。lex和yacc的实现细节可以在 Aho[1986]里找到。 Lex和Yacc可以在以下地方找到 1. Mor...
2010-06-06 22:56:17
229
原创 我想要记住这一晚
我明白自己已经拿到了一张黄牌了,如果再拿一张,就面临着人生的出局,我必须努力,这样,到我死前,第二张黄牌也不会来。我希望自己永远记住今晚,2010年6月6日,永远保持这一份危机感,为你。...
2010-06-06 22:12:20
117
原创 什么是左值
[url]http://sunxiunan.com/?p=1628[/url]这个文章是专门讲这个的,其实我觉得一句话就可以讲清楚,就是编译器生成汇编时,对应生成的是地址而非值的,就是左值。比如a = b;变成汇编可能是mov xxx[xxx], ebx; ebx里是b的值。这时的a和b都是一样的形式,但是b生成代码时,是生成的值内容,而a则是生成对应的地址。上面引的那篇文章不错,可惜...
2010-05-31 20:17:48
332
原创 羞愧ing
看到蔡学镛的最新博文[url]http://jerrylovesrebol.blogspot.com/2010/05/blog-post_26.html[/url]第一句话[b]二十多年來,我幾乎每天都在瘋狂學習[/b]真是羞愧,自己说这三天都在疯狂学习的底气都没有。不过蔡大师文章中所说的问题也是老生长谈,上次榕哥说,学习是一个行->知->行的过程,所以,上班要赶紧干活,不要看...
2010-05-26 23:05:13
185
晚上摆弄的小玩意
[code="c"]#include void p(char* s, int a){ fprintf(stderr, "%s and %d", s, a);}void f(char* s, int a){ int b[1]; printf("%x\n", b[1]); printf("%x\n", b[2]); pr...
2010-04-07 23:33:15
86
安装android惊魂记
现在电脑换了台好的,不像以前那台连eclipse也跑不动,于是决定装个android的开发环境,结果活生生地整了一晚上。我的系统是ubuntu9.10,首先去下eclipse(找个比较快的镜像都不容易,最快的有上海的镜像,不知道为什么不会自动选到这个)。最新的版本是3.5.1,下好,然后是装android的开发环境插件ADT,这个时候就出问题了,在Install New Software的ad...
2010-02-25 20:02:32
99
原创 Avl树实现的续
接着看删除部分,删除部分比插入要更难搞一些。对于删除,同样需要分情况讨论。1.如果是在一个平衡节点下删除,只要把这个节点的高度信息修改就可以了2.如果是在较长的子树下删除,就把这个节点的高度信息修改成平衡以上两种情况都不需要进行旋转。3.如果是在较短的子树下删除,除了更新高度信息外,还需要旋转节点。这时又分3种情况讨论。3种情况的图如下,直接针对编程就可以了[img]h...
2010-02-24 21:12:07
115
原创 Neil Brown精妙的avl实现
最近在复习数据结构,看到avl树,这样比较复杂的数据结构通常都很搞人。于是上网,找到一个实现看,写这代码的老外叫Neil Brown,一个大胡子,我们知道,在国外,开发人员的水平经常和胡子的多少成正比。还看到他在blog中说,这个代码打算用在linux kernel里,自然不会是普通代码了。我拿下来,狠看一阵才看懂,不得不说,这个代码很多地方的实现是很精妙的,和教材上只是为了让你理解概念的代码...
2010-02-23 20:48:51
214
lua源码注释 1
最近读了点lua的源码,打算记录下来,将来也知道自己这一段干了啥。其实我以前也试图读过lua源码,不过一直没有找对下手方向,比如我一直试图从main下手,这个是错误的,还没有进行正题,就被一大堆初始化给搞晕了,加之决心不大,就这样一直拖着没有看。不过最近因为工作的原因,熟悉了lua的c api,发现从c api入手是个不错的方法。但是首先,还是要熟悉下Lua里面的基础数据结构:[cod...
2009-12-11 21:29:23
261
为什么STL中的string没有实现operator const char*
std::string(我们就默认是std::basic_string吧)没有直接实现operator const char*,而是用一个c_str()函数来实现这个转换,我过去一直对STL这个舍近求远的做法不大理解,不过最近碰到一个应用场景,说明了这个做法的合理性。[code="java"]const char* foo(){ ....... // 这里正确的...
2009-10-17 21:59:09
208
今天碰到VC的链接问题
在MSVC中,如果用dllimport修饰的函数还在def文件中声明,那么它导出时函数名会被修改成_imp_funcname状.今天,client代码的写法是准备从dll在import函数,不想那个dll已经变成lib了,导致link错误,当时看到一堆找不到_imp_xxxx函数的错误,相当迷茫。下面两个链接仔细说明这个问题:http://msdn.microsoft.com/en-us/...
2009-10-15 22:29:47
105
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人