C++是促进脑死亡的最佳方式
文章平均质量分 81
fullsail
一个写了14年代码的人,坐在这个角落,看眼前人来人往!
展开
-
对任何返回指针的函数保持慎重
搞怪的调试,IP地址输出总是错误的问题。检查日志发现了一个日志中间的IP地址总是输出错误。 Dec 28 11:08:30.759 2007@LM_INFO@Listen peer [124.115.1.80|80] accept Socket IP Address:[124.115.1.80|64119] Success. Dec 28 11:08:31.463 2007@原创 2008-04-29 23:53:00 · 2089 阅读 · 3 评论 -
设计极其糟糕的select函数
设计极其糟糕的select函数相较Windows而言,大部分UNIX API函数设计都比较考究,但也有少数简直就是奇葩,select函数正是这些奇葩中非常灿烂的一朵。我原来一致钟情于ACE,接触的只是reactor,最近由于开始自己设计网络层的类库,被迫和select打了一些交道,被迫和这个函数打了一些交道,结果只能是看着就吐了,吐着吐着就习惯了。UNIX下select这个API由主函数s原创 2011-11-06 22:25:20 · 5640 阅读 · 2 评论 -
VC++2010下编译STLport,Boost
VC++2010下编译STLport,Boost 最近在想向Boost转移,努力掌握Boost代码的过程中,STLport版本:5.2.1Boost版本:1.4.6.1 (1.4.7.0,1.4.9.0也OK)编译器Visual Studio2010 STLPort的编译,选择Microsoft Visual Studio 20010下面的Visual St原创 2011-10-07 18:21:37 · 10112 阅读 · 0 评论 -
匈牙利命名法的辩思
匈牙利命名法的辩思随手打开8月要检视的代码,发现这次两个组的代码风格居然都选择了匈牙利命名法。也就正好借着这个机会谈谈这种命名法。由于这种命名法的深厚群众基础,我先套用一句小龙的说法,我说的都是错的。请大家抱着兼听则明的态度看这篇文章,大部分资料来自网上,我不是原创只是整理者,请参见附录:BTW:2006年前我自己也是一个匈牙利命名发的坚定拥护者,直到sonicmao给我打开另外一扇门原创 2012-10-04 11:43:44 · 20829 阅读 · 6 评论 -
VC++的文件描述符和内核文件句柄HANDLE
VC++的文件描述符和内核文件句柄HANDLE本文描述VC++中的C语言使用代码文件描述符(file descriptor),和内核文件句柄HANDLE之间关系,以及两者之间的转换函数_get_osfhandle,_open_osfhandle以及使用他们的风险。在Windows代码中代码中间文件描述符号和内核句柄HANDLE千万不要共用。在文章的开头,要声明这是我写的bug,但是是被两个原创 2012-10-21 02:40:28 · 8080 阅读 · 2 评论 -
C++使用OLE高速读写EXCEL的源码
写了不少blog,也码了一点点文字,不知道为啥,被大家看的比较多几篇文章却总有那篇《C++读写EXCEL文件方式比较》。小小伤心一下,我blog里面写的很认真的文字还有几篇,这篇大概是最随意的文章。个人估计这是SEO的作用导致的。另外,由于文中提到了可以加快OLE读取的EXCEL的速度,总有一些哥们找我要代码。好吧,好吧,把代码放出来,因为我原来也是找人家的代码逐步改的。来而不往非礼也原创 2012-12-29 00:57:06 · 57663 阅读 · 36 评论 -
C++容器模板在共享内存中的使用
本文用于探讨在共享内存中使用容器的好处,以及几种在共享内存中C++模板容器的方法。1 为什么要在共享内存中使用模板容器?为什么要避开普通内存而选择共享内存,那肯定是使用共享内存的优势:l 共享内存可以在多进程间共享,到达进程间通信的方式。l 共享内存可以在进程的生命周期以外仍然存在。这就可以保证在短暂停止服务(服务进程coredump,更新变更)后,服务进程仍然可以继续使用这些共享原创 2013-01-24 22:54:15 · 6076 阅读 · 1 评论 -
模板和多态策略化加锁
模版和多态策略化加锁关键词:策略化模式 模板策略化 多态策略化 策略化加锁模式 ACE BOOST C++ 设计模式 在ACE和BOOST的实现中都有大量的策略化加锁(Strategized Locking)的模式,这种模式能比较方便的让你的类兼容加锁和不加锁的两种情况。ACE大师Douglas C. Schmidt有一片专门的论文《Strategized Locking》对此做了原创 2012-07-31 00:21:35 · 4875 阅读 · 2 评论 -
SHA1和MD5算法详解和源码
先吹一下牛,这个估计是带中文注释写的最清楚的MD5和SHA1源码。呵呵。1 吐槽一下最近在整理一些代码,发现自己的库里面缺少一些HASH的的代码,于是决定移植一套代码进来,本来认为是个极其轻松的事情,结果却搞的小小蛋痛了一把。很多开源代码都有一点凌乱。移植过程代码主要参考过rhash这个库,好处是后面发现,其实辛亏参考的是这套库。后面发现其他库,在某些环节陷得更深,这...原创 2013-02-24 21:55:33 · 15591 阅读 · 9 评论 -
Windows同步对象Event和Linux的条件变量
最近在看一些同步对象模拟的东东,特别对在Windows下如何模拟条件变量折腾了很久。1 Windows同步对象Event微软有一个很有意思的同步对象,某种程度上和Linux的条件变量很相似。但秉承微软一贯的作风,有些地方设计的又有点怪异。Event通过函数CreateMutex创建,可以分为手动模式和自动模式两种模式,两种模式下表现迥异。和其他同步对象一样,在WaitForSingleOb原创 2013-02-24 21:41:23 · 5665 阅读 · 0 评论 -
从密码学角度看TX常用的TEA加密算法
免责声明:此文档的目的是为了分析TX常用的TEA算法,参考信息全部根据网上公开的资料,关键信息也做了过滤,不存在任何攻击和泄密。TEA这个简单加密算法在中国如此有名,大概主要因为腾讯在大量协议,本地数据中使用这个算法。网上很多人甚至直接将TX的加密算法称为TEA算法。TX的算法,数据分块的加密的确采用的是TEA(第一代)算法,密钥16个字节,每次处理的分块数据是8个字节(2个32位整数),原创 2013-04-30 15:46:26 · 6731 阅读 · 2 评论 -
编译器对C++ 11变参模板(Variadic Template)的函数包扩展实现的差异
编译器对C++ 11变参模板(Variadic Template)的函数包扩展实现的差异 题目挺绕口的。C++ 11的好东西不算太多,但变参模板(Variadic Template)肯定是其中耀眼的一颗明星,在C++设计新思维中,你可以看到很多模版的代码为了支持不确定的参数个数,而要重载1个参数到N个模板参数的N个函数。虽然种代码一般也是用会用宏和脚步辅助生成。但我想也没有人愿意看到几千行这种...原创 2014-12-30 01:44:43 · 5428 阅读 · 1 评论 -
C++读写EXCEL文件方式比较
因为有些朋友问代码的问题,将OLE读写的代码分享在这个地方,大家请自己看。 http://blog.csdn.net/fullsail/article/details/8449448C++读取Excel的XLS文件的方法有很多,但是也许就是因为方法太多,大家在选择的时候会很疑惑。由于前两天要做导表工具,比较了常用的方法,总结一下写个短文, 1.OLE的方式这个大约是最常原创 2009-04-12 19:36:00 · 138485 阅读 · 12 评论 -
Protocol Buffers编码详解,例子,图解
Protocol Buffers编码详解,例子,图解本文不是让你掌握protobuf的使用,而是以超级细致的例子的方式分析protobuf的编码设计。通过此文你可以了解protobuf的数据压缩能力来自什么地方,版本兼容如何做到的,其Key-Value编码的设计思路。如果你详细了解此文,你应该就能具备自己造一套编解码轮子的能力(至少基本思路)。测试的例子阅读图片时请对比前面的例子和表格原创 2015-01-13 22:32:20 · 10248 阅读 · 1 评论 -
多次HASH算法解决冲突的效果测试
多次HASH算法解决冲突的效果测试自己实现的共享内存的HSH算法解决冲突的方法是开链,最近在考虑做一个简化版本的数据存储时,需求的同事提出了希望能备份共享内存中的数据,当然这个有简单的方法,让使用者根据地址自己拷贝复制就可以了(当然如果你共享内存比较大,建议考虑64位的系统)。但是由于开链的算法天生弱点(开链的链表的处理不能分割),复制的事情只能让使用者解决,于是开始看公司另外一些同事的算法,多次HASH的解决冲突的算法。多次HASH由于所有数据的存储完全是序列化的,没有链子,而且可以使用一个不可能出现的数原创 2011-04-17 01:28:00 · 9393 阅读 · 18 评论 -
不要用多态方式处理数组以及数组的析构
今天Jackxu贴了一段代码说有一个奇怪的崩溃,希望一起看看,于是一研究了一下,代码如下,coredump崩溃的地方在delete,编译器是gcc 4.1.2版本。同时在visual studio 上,这个没有错误。崩溃前也没有任何输出。#includeclass Base{ char sz[12]; public: virtual ~Base() { printf("Base::~Base/n"); }};clas原创 2011-03-31 03:03:00 · 3355 阅读 · 6 评论 -
利用小技巧用于跟踪函数的进出过程
有一次为了调试ACE的代码打开了ACE_TRACE的开关,除了对蜂拥而出的日志输出有印象外还对ACE的函数进出提示产生了好感。对于后台调试的时候,往往必须使用大量的日志跟踪。而简单的加入函数进出的功能是一个不错的选择。稍稍看了一下ACE的实现,感觉效果一般,还要自己写跟踪的函数名称。也不是太爽。(ACE估计是苦于大家对C++标准的支持程度)。感觉了一下,其实函数的进出跟踪都可以使用一个结构的原创 2008-04-30 00:11:00 · 16951 阅读 · 1 评论 -
printf函数一些不太为人熟知的格式定义参数
(1)%.32s . 小数点用于负点的格式说明符号大家都知道了。其实她还可以用于字符创的截断(最大长度)限定,Jovi GG给得例子。例如: %6.9s 表示显示一个长度不小于6且不大于9的字符串。若大于9, 则 第9个字符以后的内容将被删除。 所以%.32s表示最大输出%.32s的长度.(2)%.*s 程序员总是得寸进尺,如如果能用参数动态限制字符串的长度,世界原创 2008-07-11 00:35:00 · 2397 阅读 · 1 评论 -
内网的IP地址判断
1 内网的IP地址判断分布式系统的设计中,经常要判断一个请求是否来自于内外还是外网,如果外网用户使用了内网的请求往往会发生恐怖的事情。对企业网的IP分配一般以RFC1918中定义的非Internet连接的网络地址,也称为私有地址。由Internet地址授权机构(IANA)控制的IP地址分配方案中,留出了三类网络地址,给不连到Internet上的专用原创 2008-10-17 00:45:00 · 5626 阅读 · 3 评论 -
注意参数的型别和函数参数的匹配
1 注意参数的型别和函数参数的匹配检查COMMLIB部分,发现GCS部分一个告警。pet_gcs_interface.cpp:212: warning: passing NULL to non-pointer argument 3 of ssize_t ACE_SOCK_Stream::send_n(const void*, size_t, int, c原创 2008-10-17 00:48:00 · 2613 阅读 · 0 评论 -
雪崩效应造成处理阻塞
昨天(其实好久了,这是邮件内容)发现ogre4ad(一个比较适应通用的通讯协议的服务器,依靠PIPE和业务进程通讯)发送数据感觉速度慢,(就像有阻塞),服务器重启动一段时间后,就会出现后端服务器进城将发送管道写满的情况。前端的用户请求无法正常处理。业务服务器的日志如下,每次处理都是管道阻塞。Apr 23 19:00:42.771 2008@LM_ERROR@SEND_PIPE Pipe原创 2008-12-19 01:17:00 · 2082 阅读 · 0 评论 -
三通机房
大概只有在中国互联网的人才能明白这个标题,呵呵。老外大概无论如何理解不了这种问题的。中国的运营商(ISP)是有势力范围的,这个势力范围往往是由于地域经营范围和行政等原因造成的,比如电信和联通(原网通),是由于老电信的拆分,造成了一个负责北方固定电话业务,一个负责南方固定电话业务,而由于教育网是原来教育部的管理的,和通讯运营商联系不紧密。所以中国的网络服务基本分成三块,电信,联通,和教育网,而中原创 2009-05-06 22:07:00 · 2928 阅读 · 0 评论 -
chroot导致日志时间出错的BUG
下面都是Inmoreliu的总结,我只是抄袭了,如果哪天我集结出版了,我一定付他稿酬。首先要说明一下chroot函数是一个UNIX函数,用于改变整个程序的虚拟的根目录,这个函数的最主要的用途是保证运行系统的安全,降低被攻击的可能。问题现象:由于anna MM反映无法更新pet_def.db3文件,于是到dlsvrd上跟了一把日志。发现输出的日志时间不太对,也没有太在意,以为可能是谁转载 2009-05-09 16:10:00 · 2161 阅读 · 0 评论 -
慎用Visual Studio C++默认的hash_map
慎用Visual Studio C++默认的hash_map写了一个模块客户端和服务器共用,为了加快查询速度,用了hash_map,今天一个兄弟老卢测试说将其中的hash_map替换成map后速度更快,有点晕。自己写了一段代码在Windows下用Visual Studio C++测试hashmap。首先说明,hashmap目前还没有进入C++的规范,但是大部分厂商都实现了这个容器,测试的h原创 2009-06-01 01:50:00 · 10975 阅读 · 13 评论 -
发现自己认识错误的C++问题还很多
今天一天,发现自己对C++的认识还处于低级水平。一天发现了3个以前的认识错误。1.虚函数指针的长度用sizeof是可以看到的,原来以为一直是不包括的。这个地方我一直以为是取决于实现的,好多年前看过《C++对象模型》,不知道是记错了还是记混了。原来看见penghao的一篇PPT上有一个问题是memset一个类(有虚函数),会导致什么问题,他当时的答案是覆盖虚表,我居然忽视了这个问题。今天在调原创 2009-08-12 13:44:00 · 3590 阅读 · 5 评论 -
面对查找需求如何选择容器
面对查找需求如何选择容器在写代码的时候,即使编程老手经常会遇到一个不知道如何抉择的事情,面对查询的需求如何选择容器,容器的大小等因素也会困扰我们的选择。为什么呢?新手面对查询往往会直接选择map,因为map是内部是支持查询函数的,但老手知道map是通过复杂性换取查询的性能的(map的实现往往是红黑树),那如果要保存的数据个数不多呢,是否值得使用map这样的容器呢?最近两天写了几行短小的代码原创 2009-06-27 22:31:00 · 4889 阅读 · 5 评论 -
环形缓冲区,魔戒lordrings,boost的circular_buffer
2月要过去,这个月几乎一点东西没有写,不想懒惰一个月,但有没有什么特别值得写的东西。所以翻了翻存货,抖抖尘土,找了这篇出来。这个文章Linker看见标题会笑的,呵呵,因为他在2007年就写过一篇类似的文章《环形缓冲区的实现》。但其实我的作品应该早于他的,我的当时作品名字是cycdeuque.Linker当时刺激我的不止他的文章,还有他的类名字,ring。比我的酷了很多。于是把我的实现名字改成了原创 2010-02-27 22:57:00 · 8507 阅读 · 8 评论 -
对Visual Studio C++ hash_map严谨一点的测试
对Visual Studio C++ hash_map严谨一点的测试在上次测试完成后,有一个网友mm304321141 (明儿)在留言上对测试数据进行了质疑,先谢谢他的指正。 我的确不知道Visual Studio C++ 默认的Dinkumware STL hash_map的hash_compase有两个参数bucket_size 和min_buckets ,我自己实现的时候类是从stdex原创 2009-12-21 01:57:00 · 5372 阅读 · 13 评论 -
单参函数前面加上explicit描述
单参函数前面加上explicit描述前两天,写到一个unsigned int 打印到ostringstream,编译居然报错,出错的地方如下:std::ostringstream & operator{ //test_uin_是一个unsigned int //下面这一行报错, ostr……}由于我使用了STLport原创 2010-01-02 21:21:00 · 2019 阅读 · 3 评论 -
LuaTinker的bug和缺陷
LuaTinker的bug和缺陷LuaTinker是一套还不错的C++代码和Lua代码的绑定库,作者是韩国人Kwon-il Lee,作者应该是参考了LuaBind后,为了简化和避免过重而实现的。其官网在http://gpgstudy.com/gpgiki/LuaTinker ,但可惜全部是韩文的,而最新的代码可以在Git上下载,https://github.com/zupet/LuaTin原创 2014-12-30 01:31:52 · 6558 阅读 · 2 评论