
c/c++
zenghui08
这个作者很懒,什么都没留下…
展开
-
初始化列表顺序
以初始化列表的形式在构造函数中对类的成员变量初始化时,初始化的顺序和变量声明的顺序一致(不是初始化列表中的顺序)。当初始化列表中的顺序和成员变量声明的顺序不一致时,编译会产生警告(g++中打开-Wall): XXX will be initialized after XXX when initialized here 之所以有警告,是因为这么做可能会产生潜在的问题,原创 2012-11-18 14:14:41 · 1453 阅读 · 0 评论 -
strace问题定位
问题:进程CPU占用率100%,用strace查看进程系统调用情况,发现madvise调用占90%的时间(正常情况下应以clockgettime,epoll_wait,epoll_ctl为主)。系统日志中有channel overflow错误,状态日志中显示channel的write调用有大量返回失败。代码走读:基础库代码中将数据传输通道,如socket,fifo,shm等抽象成c原创 2014-03-09 14:19:42 · 2563 阅读 · 0 评论 -
构造函数和this指针
A(): b(this) 通常this指针在对象构造完毕后才完全生成,而在构造函数执行过程中,对象还没有完全生成,所以this指针也是没有完全生成的,在构造函数中使用this指针会存在问题,应该尽量避免。 构造函数中可以访问对象中已经初始化的成员(成员初始化是有顺序的),但尽量不要调用对象方法,因为调用方法的时候会隐含使用this指针。原创 2013-09-20 20:00:04 · 8317 阅读 · 0 评论 -
32位Linux文件大小限制
线上程序不断重启,查看log发现是进程因为SIGXFSZ信号退出。对过大的文件进行操作的时候会产生此信号,一般只在32位机器上出现,文件大小限制为2G。用lsof查看进程打开的文件,果然有一个文件达到2G。 解决方案:编译时加上参数:-D_FILE_OFFSET_BITS=64;代码中调用lseek时参数为off_t(不要为int或long,否则在32位和64位中表现不同)。原创 2014-07-18 16:10:35 · 3050 阅读 · 0 评论 -
HTTP文件传输
HTTP协议用于文件传输时,一般把文件内容放到消息体中。作为TCP之上的流式传输协议,发送端和接收端可以对大文件进行流式的发送和接收。1.确定大小的文件传输 消息头部的Content-Length字段表示文件的长度,用于接收端确定文件的结束。2.Chunked编码 当文件大小无法事先确定时,无法设置Content-Length字段。此时可以用分块传输的方原创 2015-08-28 22:15:51 · 9706 阅读 · 0 评论