windows在WinDef.h中定义了min/max,可能会屏蔽掉std::min/max。
解决方法:
#define NOMINMAX
2008年12月10日星期三
cannot open input file kernel32.lib
装了2003和2008,用2008的nmake编译一个msvc文件时,报错提示找不到kernel32.lib。
搜了一下,只有2003的Vc7\PlatformSDK\Lib目录下才有kernel32.lib,而2008下是没有的。难道这也会ref count?
还有用nmake时,E:\Program Files\Microsoft Visual Studio 9.0\VC\bin目录下没有msobj80.dll,mspdb80.dll,mspdbcore80.dll,mspdbsrv.exe,要从2008的Common7\IDE目录下copy过来。
真是诸多困扰。所谓的n年经验,一部分就是这样的吧。
搜了一下,只有2003的Vc7\PlatformSDK\Lib目录下才有kernel32.lib,而2008下是没有的。难道这也会ref count?
还有用nmake时,E:\Program Files\Microsoft Visual Studio 9.0\VC\bin目录下没有msobj80.dll,mspdb80.dll,mspdbcore80.dll,mspdbsrv.exe,要从2008的Common7\IDE目录下copy过来。
真是诸多困扰。所谓的n年经验,一部分就是这样的吧。
2008年11月24日星期一
Sentence from Dict
In the recent crisis no banks could manage to bail out the companies feeling financial pressure.
2008年11月10日星期一
Tiny-mce编辑器中的
代替
http://wiki.moxiecode.com/index.php/TinyMCE:FAQ
So if you really really must use BR elements for some odd reason then set this in your init code:
tinyMCE.init({
forced_root_block : false,
force_br_newlines : true,
force_p_newlines : false
});
2008年11月4日星期二
使用swap控制container的capacity
DevC也是个能学到东西的地方。
一些小trick。
C++容器的capacity缩减的方法:使用container自己的swap,
vector tVec;
在执行一些操作之后tVec的capacity可能比实际的size大很多,在某些场合可能需要减少两者的差距。文章介绍使用vector(tVec).swap(tVec); 可以使得tVec的capacity等于size,原理是产生一个临时对象,以tVec进行赋值。如果要使得capacity为0的话,可以使用vector().swap(tVec) 。
2008年10月19日星期日
sprintf, lexical_cast, format效率比较(转载)
由于发现boost::replace_first的效率有些问题(其实是使用的场合问题),刚接触boost::format,找到一篇比较其效率的文章,以后使用的时候,还是要多考虑是否为选择最适合的方法而不是最热门的。以下为转载内容。
sprintf,lexical_cast,format 三者效率比较收藏
作者: 江淼Blog: http://blog.csdn.net/jiangfriend
时间: 2007-7-30 00:42
sprintf至C语言流传至今,经久不衰,虽然microsoft好心提供sprintf_s,并发出C4996的警告,我个人是比较不接这个领子。 sprintf安全问题一直被大家质疑,但我觉的出现了安全的问题是设计上的缺陷,正如线程死锁也是设计上的缺陷,一个需要杀死线程的程序绝对不是一个合格的程序。
lexical_cast是boost的成员之一,因为文件比较短,源码走马观花的看过一遍,内部使用的是stream,不过lexical_cast仅仅是个转换,其出现用于代替atoi,这里顺便带过。
format是boost提供的用于格式化的库,我才疏学浅也没时间分析源码,只知道使用方法。有兴趣的可以看看,一定会有不少收获,发出C++原来还能这样用的感叹。
测试
下面对该3各具特色的函数进行效率上的测试。
测试环境:赛扬D2.66G 内存512M,测试状态为日常应用状态(即运行了一些程序)VC8.0
测试程序很简单,简单的循环
for(int i=0;i<1000000;i++)
{
command;
}
各执行100万次后得出下表
command Release(ns) Debug(ns)
sprintf(buf,"%d",3); 289769 451770
lexical_cast
format("%1%")%3; 14006000 4833.51% 133649200 29583.46%
sprintf(buf,"%d %s",3,"Hello"); 527948 828527
format("%1% %2%")%3%"Hello"; 18745300 3550.60% 178153800 21502.47%
和官方性的性能测式有些出入,诂计是我赛扬的原因且运行了一些程序。
意料之中,sprintf因其没啥"负担"效率手当其冲,功能最复杂的boost.format居于最后。lexical_cast虽然花了400%的时间,相对值虽然大,但绝对值还是可以接受的。
总结
在效率第一的情况下如内核,核心算法,反朴归真是最佳的选择,用c命令代替c++命令等等。
lexical_cast可以用在一般的应用,但如前文所说仅仅单个的格式转换。
format的速度约为15ns/条,比起sprintf着实笨拙,但在高速的计算机面前,一般应用也是绝对可以接受的,虽然多花了三四十倍的时间,但因其具备完全替代sprintf的功能且有过之而无不及,也有一立足之地。
订阅:
博文 (Atom)
