
C++
文章平均质量分 65
nellson
这个作者很懒,什么都没留下…
展开
-
浅谈C中的malloc和free
在C语言的学习中,对内存管 理这部分的知识掌握尤其重要!之前对C中的malloc()和free()两个函数的了解甚少,只知道大概该怎么用——就是malloc然后free就一 切OK了。当然现在对这两个函数的体会也不见得多,不过对于本文章第三部分的内容倒是有了转折性的认识,所以写下这篇文章作为一个对知识的总结。这篇文章 之所以命名中有个“浅谈”的字眼,也就是这个意思了!希望对大家有一点转载 2008-09-03 09:47:00 · 727 阅读 · 1 评论 -
HTTP/FTP客户端开发库:libwww、libcurl、libfetch 以及更多
网页抓取和ftp访问是目前很常见的一个应用需要,无论是搜索引擎的爬虫,分析程序,资源获取程序,WebService等等都是需要的,自己开发抓取库当然是最好了,不过开发需要时间和周期,使用现有的Open source程序是个更好的选择,一来别人已经写的很好了,就近考验,二来自己使用起来非常快速,三来自己还能够学习一下别人程序的优点。闲来无事,在网上浏览,就发现了这些好东西,特别抄来分享分享。主要转载 2010-02-08 09:54:00 · 947 阅读 · 0 评论 -
如何把std::string当char *使用?
std::string使用很方便,但有时会碰到这样的问题,比如我们有一个结构体,内容如下所示: typedef struct _datainfo{ int i; unsigned time;} DATAINFO; DATAINFO stInfo;stInfo.i = 10;stInfo.time = time(NULL); 如果要把这个结原创 2010-03-06 09:14:00 · 3030 阅读 · 0 评论 -
路由查找算法优化心得
项目代码中有一个基础类库,用于解析client到server的路由配置文件,同时管理长连接。路由配置文件格式大致如下所示: 大概含义表示,路由算法是使用用户id%1000,然后看落到[begin, end]的对应区间,找到对应的ip和port即是对应的server信息。 【当前方案】 类库把路由信息和原创 2010-04-28 19:57:00 · 1294 阅读 · 0 评论 -
解Google-ProtoBuf中结构化数据的编码
<br /> <br />本文的主要内容是google protobuf中序列化数据时用到的编码规则,但是,介绍具体的编码规则之前,我觉得有必要先简单介绍一下google protobuf。因此,本文首先会介绍一些google protobuf相关的内容,让读者朋友对google protobuf有一个初步的印象,然后,再开始进入正题—-深入浅出地介绍google protobuf中用到的编码规则。下面言归正传,开始今天的话题。1. Google-ProtoBuf是什么<br />ProtoBuf,全称转载 2010-06-30 09:41:00 · 3250 阅读 · 1 评论 -
LINUX系统中动态链接库的创建与使用
大家都知道,在WINDOWS系统中有很多的动态链接库(以.DLL为后缀的文件,DLL即Dynamic Link Library)。这种动态链接库,和静态函数库不同,它里面的函数并不是执行程序本身的一部分,而是根据执行程序需要按需装入,同时其执行代码可在多个执行程序间共享,节省了空间,提高了效率,具备很高的灵活性,得到越来越多程序员和用户的青睐。那么,在LINUX系统中有无这样的函数库呢?答案是肯定的,LINUX的动态链接库不仅有,而且为数不少。在/lib目录下,就有许多以.so作后缀的文件,这就是LINUX转载 2010-07-04 09:00:00 · 643 阅读 · 0 评论 -
Linux下静态链接库的制作与使用
<br />Linux 中的应用程序以以下两种方式之一链接到外部函数:要么在构建时与静态库( lib*.a)静态地链接,并且将库代码包含在该应用程序的可执行文件里;要么在运行时与共享库( lib*.so)动态地链接。通过动态链接装入器,将动态库映射进应用程序的可执行内存中。在启动应用程序之前,动态链接装入器将所需的共享目标库映射到应用程序的内存,或者使用系统共享的目标并为应用程序解析所需的外部引用。现在应用程序就可以运行了。<br /><br />先介绍静态库:<br />静态函数库实际上就是简单的一个普通转载 2010-07-04 08:57:00 · 955 阅读 · 1 评论 -
动态链接库使用举例
前面转了两篇动态链接库的使用方法,下面举例说下高级用法使用使用:先附上源码,共五个文件/*print.h*/#include #include void print(char * msg);/*print.c*/void print(char * msg){ printf("msg:%s/n", msg);}/*main.c*/#include "print.h"int main(int argc, char ** argv){ if原创 2010-07-04 09:13:00 · 801 阅读 · 0 评论 -
类静态指针的申请和释放
<br /> 如果类有一个静态成员指针变量,在进程中执行new或malloc操作分配了内存,进程退出前并不需要调用new或malloc,因为系统会自动进行释放。但这个静态成员指针变量需要多少分配,又应该如果处理呢,最近在项目代码中看到这样的例子,和大家分享一下。<br /> <br /> #include <unistd.h>#include <stdio.h>class CPointer{ public: CPointer(){};原创 2010-07-16 07:27:00 · 11829 阅读 · 4 评论 -
分享一个调用耗时统计类
项目中经常需要统计调用一个外部接口的耗时,在做性能测试时也常需要分析N次调用所需时间,这类统计有一个共性点,即关注调用或执行的相对时间,而不关心绝对时间。 因此,为了性能起见,无需每次都调用gettimeofday,而只需读取系统的时间戳计数器中时间即可。 代码路径如下:http://code.google.com/p/modulecall 类代码如下所示:/* * author nellson * date 2010-07-18 * note calc time cost原创 2010-07-19 07:39:00 · 1200 阅读 · 0 评论 -
合理使用const,慎用自运算
项目中出现了几次运营事故,都是因为使用自乘、自加、自減运用,错改了非局部变量,导致将用户数据写溢出,最终只能将用户的数据回档处理。 代码展示 先给大家展示一下,漏出bug的代码吧。 代码1 /* * 给每个用户补偿固定值的金币数 */int main(int argc, char ** argv){ if (argc原创 2010-08-07 07:36:00 · 851 阅读 · 0 评论 -
结构体或类定义中对变长成员的处理
<br />对于一个结构体,头部信息固定,成员节点变长的,可以采用下面的定义方式:<br />1. 数组<br />typdef struct _stHeadInfo /*头部*/<br />{<br /> int version;<br /> int magic_num;<br /> int req_count;<br /> int res_count;<br /> char cgiinfo[0];<br />} stHeadInfo __attribute__((__aligned__(4)));<br原创 2010-06-19 22:54:00 · 1524 阅读 · 0 评论 -
编译错误:multiple types in one declaration
<br />昨天编译时报如下错误<br />/data/..../hnconv.h:6: error: multiple types in one declaration<br />/data..../hnconv.h:6: error: declaration does not declare anything<br /> <br />代码如下:<br />#ifndef _TOIW_BBSDBSVR_H_#define _TOIW_BBSDBSVR_H_typedef char DWORD[原创 2010-12-08 18:44:00 · 8933 阅读 · 0 评论 -
关于模版的一个问题
http://www.cplusplus.com/doc/tutorial/templates/ Templates and multiple-file projectsFrom the point of view of the compiler, templates are not normal functions or classes. They are compiled on原创 2011-07-01 14:07:00 · 606 阅读 · 0 评论 -
【Boost】 ASIO 译文
Christopher KohlhoffCopyright © 2003-2012 Christopher M. Kohlhoff以Boost1.0的软件授权进行发布(见附带的LICENSE_1_0.txt文件或从http://www.boost.org/LICENSE_1_0.txt)Boost.Asio是用于网络和低层IO编程的跨平台C++库,为开发者提供了C++环境下稳定的异步模转载 2016-02-23 19:47:49 · 959 阅读 · 0 评论 -
Linux下的调试工具
转载时请注明出处和作者联系方式文章出处:http://www.limodev.cn/blog作者联系方式:李先静 随着XP的流行,人们越来越注重软件的前期设计、后期的实现,以及贯穿于其中的测试工作,经过这个过程出来的自然是高质量的软件。甚至有人声称XP会淘汰调试器!这当然是有一定道理的,然而就目前的现实来看,这还是一种理想。在日常工作中,调试工具还是必不可少的。在Linux下,调试工具并转载 2010-02-08 09:52:00 · 512 阅读 · 0 评论 -
对CURL的一些研究
前两天看到有人求客户端socket 发HTTP包的代码,受flw版主启发找了一些perl的资料,不过对perl 还是不太熟悉。也没有深入的研究。无意中发现了libcurl.so 这个库。去google上搜索发现它是处理客户端发送HTTP请求的库以及可以处理web服务器回送回来的包。研究 了两天将研究的成果,共享出来给大家一起研究。 参考:http://curl.haxx.se/ 这是cur转载 2010-02-06 10:03:00 · 950 阅读 · 0 评论 -
程序的存储空间布局
栈由编译器自动分配释放管理。局部变量及每次函数调用时返回地址、以及调用者的环境信息(例如某些机器寄存器)都存放在栈中。新被调用的函数在栈上为其自动和临时变量分配存储空间。通过以这种方式使用栈,C函数可以递归调用。 堆需要由程序员分配释放管理,若程序员不释放,程序结束时可能由OS回收。通常在堆中进行动态存储分配。 非初始化数据段 通常将此段称为b s s原创 2008-09-03 09:59:00 · 802 阅读 · 0 评论 -
C++多线程编程学习二 [类中封装互斥量的设计]
之前我也提到过,如果一个类的数据成员中在多线程环境中可能会被竞争使用时,一定要在类中解决这个问题,而不是在代码编写过程中在每次使用时去申请或释放,这样做的确很灵活,但是随着代码量的增加和开发时间长的话,你可能会漏掉或忘记对竞争资源的处理,believe me!这是每个程序员都会犯的错误,因此,我们必须在类的设计时就考虑到这个问题,这样做也可以避免在别人使用你的类的时候,在不了解类结构的原创 2010-02-06 09:22:00 · 1062 阅读 · 0 评论 -
sscanf函数的用法
1. 常见用法。 以下是引用片段: char str[512] = {0}; sscanf("123456 ", "%s", str); printf("str=%s/n", str); 2. 取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。以下是引用片段: sscanf("123456 ", "%4s", str); printf("str=%s/n", str转载 2010-02-06 09:28:00 · 447 阅读 · 0 评论 -
half-sync/half-async 和 Leader/Followers 模式的主要区别
half-sync/half-async 和 Leader/Followers 模式的主要区别关键字: half-sync/half-async leader/followers 在 《POSA2》 一书中,关于这两个模式有两个很形象的比喻: 半同步/半异步(half-sync/half-async): 许多餐厅使用 半同步/半异步 模式的变体。例如,餐厅常常雇佣一个领班负责迎接顾客,并在转载 2010-02-06 09:40:00 · 840 阅读 · 0 评论 -
C中的文件与IO操作
什么是文件?“文件”是计算机内外存储信息交换的单位,是指存储在外部介质上的数据的集合,无论是一个字符或是成千上万条记录,都要以文件的方式加以存放和处理。在内存中,所有的文件都要以二进制形式存储,二进制文件可以不经转换直接与内存通信。C语言把文件看做一个字节序列,即由一连串的字节组成,称为“流Stream”,以字节为单位访问,没有记录的界限。 文件分类:一,按文件所依附的介质来分:磁盘文件,磁带文转载 2010-02-06 09:29:00 · 545 阅读 · 0 评论 -
C++ 友元(friend)
问题的提出 我们已知道类具有封装和信息隐藏的特性。只有类的成员函数才能访问类的私有成员,程序中的其他函数是无法访问私有成员的。非成员函数可以访问类中的公有成员,但是假如将数据成员都定义为公有的,这又破坏了隐藏的特性。另外,应该看到在某些情况下,非凡是在对某些成员函数多次调用时,由于参数传递,类型检查和安全性检查等都需要时间开销,而影响程序的运行效率。 为了解决上转载 2010-02-06 09:42:00 · 979 阅读 · 0 评论 -
Google C++ 风格指南 - 中文版 [值得收藏]
http://yangyubo.com/google-cpp-styleguide/ 很实用的手册,感觉象是effective c++,但其中明确指出了一些在开发过程中应该尽力避免的特性与用法,完全基于经验判定,更加简练! 每一章后面还有译者的笔记,进行了总结! 1.代码小于10行时使用inline 2.private拷贝构造函数,尽量不重载运算符 3.少用继承,看是否能用组合代替 比如上原创 2010-02-06 09:05:00 · 582 阅读 · 0 评论 -
C++多线程编程学习三 [FIFO队列设计]
在网络编程中,FIFO队列是经常使用到的一个数据缓冲机制,同时这也是一个生产者与消费者问题,在设计过程中要注意以下几点。队列大小设计要科学,对于服务的强度而言,有一个最优化长度,要通过测试去发掘。数据竞争保护,通过设定条件互斥量,对涉及队列的操作进行保护。事件通知策略,两个线程,一个读,一个写,每写一个数据到队列中就要进行“事件通知”,而读消息每 次读消息前都要检测事件是否处在信号通原创 2010-02-06 09:24:00 · 1781 阅读 · 0 评论 -
C++堆、栈、自由存储区、全局/静态存储区和常量存储区
在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。 栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。 堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。转载 2010-02-06 09:30:00 · 472 阅读 · 0 评论 -
类模板学习总结
1.类模板就是给普通的类加上一个参数,参数可以是未知数据类型标识(如int, string,char, class等),也可以是已知数据类型的值,在下面的第二个例子中,类模板参数实例化会生成一个新的类,这个类中的高与宽是确定的,用该类可以实例化对象,在这个对象中,这两个值也是确定的。template template class CQueueItem;template class CQueue{p原创 2010-02-06 09:34:00 · 726 阅读 · 0 评论 -
用GDB调试程序
简述 一 列文件清单 二:执行程序 三:显示数据 四:断点(breakpoint) 五.断点的管理 六.变量的检查和赋值 七. 单步执行 八.函数的调用 九.机器语言工具 十.信号 GDB的使用方法 简述一 列文件清单List (gdb) list line1,line2二:执行程序要想运行准备调试的程序,可使用run命令,在它后面可以跟随发给该程转载 2010-02-06 09:37:00 · 515 阅读 · 0 评论 -
C++中public,protected,private访问小结
=================================================已知3个类O、P和Q,类O中定义了一个私有方法F1、一个公有方法F2和一个受保护的方法F3:类P和类Q是类O的派生类,其继承方式如下所示: class P : protected O {…}; class Q : public O {…}; 关于方法F1的描述中正确的是___(34)___;关于方法F转载 2010-02-06 09:41:00 · 974 阅读 · 0 评论 -
printf格式控制符[备忘]
(1)输出格式控制综述: printf的格式控制的完整格式:% - 0 m.n l或h ①%:格式说明的起始符号,不可缺少。 ②-: 有-表示左对齐输出,如省略表示右对齐输出。 ③0:有0表示指定空位填0,如省略表示指定空位不填。 ④m.n:m指域宽,即对应的输出项在输出设备上所占的字符数。n指精度,用于说明输出的实型数的小数位数。未指定n时,隐含的原创 2010-02-06 09:56:00 · 997 阅读 · 0 评论 -
C++多线程编程学习一 [关于数据竞争问题]
C++语言并不支持多线程,C++的多线程编程是通过调用操作系统的低层函数实现的,常见的操作系统平台有MS的Windows、UNIX、LINUX、Open Solaris,C、C++都可以很好调用系统函数实现多线程。 采用多线程的好处大家都很熟悉了,可以充分利用系统资源,通过合理调度最大程序上并发执行,但是如果设计不当反而会与初衷相悖,带来更多的麻烦,本文主要就多线原创 2010-02-06 09:16:00 · 1965 阅读 · 0 评论 -
【Boost】Interprocess - 共享内存、文件映射介绍
通过Interprocess,可以实现在共享内存、文件映射中保存vector、map等STL对象,并且可以使用自定义的类,官方文档介绍的也很详细了,下面是几个精简的示例。原创 2016-02-17 16:39:35 · 7517 阅读 · 0 评论