C/C++
文章平均质量分 87
cnzf1
业精于勤 荒于嬉;行成于思 毁于随;
展开
-
C++基类继承 enable_shared_from_this 之后派生类无法使用 shared_from_this() 的解决方法
在很多情况下,我们会在基类中继承 std::enable_shared_from_this 来使得在该类的方法中能够使用 shared_ptr 托管的 this 指针。例如:class Base : public std::enable_shared_from_this<Base>{{public: Base() { /* ... */ } ~Base() { ...转载 2018-10-08 17:24:00 · 2192 阅读 · 0 评论 -
linux下c/c++实例之七递归扫描目录下的文件
一、简介 Linux下递归扫描该目录下所有的文件,完成更为详细的文件操作需求。其他库中比如Qt、Boost库中已有接口函数。二、详解1、递归扫描文件的代码(1)scanfile.cpp:[html] view plain#include iostream> #include string> #include vector> #转载 2016-03-14 15:06:20 · 1882 阅读 · 0 评论 -
STl中的排序算法
1. 所有STL sort算法函数的名字列表: 函数名 功能描述sort 对给定区间所有元素进行排序stable_sort 对给定区间所有元素进行稳定排序partial_sort 对给定区间所有元素部分排序partial_sort_copy 对给定区间复制并排序nth_element 找出给定区间的转载 2015-12-30 11:19:13 · 702 阅读 · 0 评论 -
编程思想之多线程与多进程(4):C++ 中的多线程
《编程思想之多线程与多进程(1)——以操作系统的角度述说线程与进程》一文详细讲述了线程、进程的关系及在操作系统中的表现,《编程思想之多线程与多进程(2)——线程优先级与线程安全》一文讲了线程安全(各种同步锁)和优先级,这是多线程学习必须了解的基础。本文将接着讲一下C++中多线程程序的开发.这里主要讲Windows平台线程的用法,创建线程要调用windows API的CreateThread方法转载 2015-10-28 21:06:33 · 377 阅读 · 0 评论 -
C++11新特性--右值引用
概述 右值引用的概念有些读者可能会感到陌生,其实他和C++98/03中的左值引用有些类似,例如,c++98/03中的左值引用是这样的:int i = 0;int& j = i; 这里的int&是对左值进行绑定(但是int&却不能绑定右值),相应的,对右值进行绑定的引用就是右值引用,他的语法是这样的A&&,通过双引号来表示绑定类型为A的右值。通过&&我们就可以很方便的绑定右转载 2015-10-05 17:51:12 · 1225 阅读 · 3 评论 -
善用SourceMonitor+Astyle,让代码维护者不再骂娘
1. 什么样的代码让你想骂娘?什么样的代码最想让你骂娘,是这样的,代码层层嵌套或者是这样的密密麻麻,舍不得多一行免费空格又或者是那种又臭又长的代码呢?代码除了用来运行外,还有很重要的就是阅读,给自己阅读,或者给他人阅读,如果几个月后你自己都看不下去自己以前写的代码,呵呵…2. 我们需要漂亮的代码爱美之心,人皆有之。漂亮的代码,也是我们程序猿的追求,它不仅能够完成要求转载 2015-10-02 14:44:29 · 763 阅读 · 0 评论 -
gdb调试coredump文件,函数名称是问号
我的程序crash,有了coredump文件,在Linux PC上用arm-linux-gdb debug it. The result is:#0 0x4022b178 in ?? ()(gdb) bt#0 0x4022b178 in ?? ()#1 0x4022b134 in ?? ()#2 0x4022b134 in ?? ()Backtrace stop转载 2015-03-25 14:04:40 · 19397 阅读 · 1 评论 -
Make 命令教程
代码变成可执行文件,叫做编译(compile);先编译这个,还是先编译那个(即编译的安排),叫做构建(build)。Make是最常用的构建工具,诞生于1977年,主要用于C语言的项目。但是实际上 ,任何只要某个文件有变化,就要重新构建的项目,都可以用Make构建。本文介绍Make命令的用法,从简单的讲起,不需要任何基础,只要会使用命令行,就能看懂。我的参考资料主要是Isaac Schlueter的转载 2015-03-31 00:30:37 · 570 阅读 · 0 评论 -
编写高效的C程序与C代码优化
虽然对于优化C代码有很多有效的指导方针,但是对于彻底地了解编译器和你工作的机器依然无法取代,通常,加快程序的速度也会加大代码量。这些增加的代码也会影响一个程序的复杂度和可读性,这是不可接受的,比如你在一些小型的设备上编程,例如:移动设备、PDA……,这些有着严格的内存限制,于是,在优化的座右铭是:写代码在内存和速度都应该优化。整型数 / Integers在我们知道使用的数不可能是负数的时候转载 2014-12-27 01:55:23 · 810 阅读 · 0 评论 -
MP4文件格式的解析,以及MP4文件的分割算法
mp4应该算是一种比较复杂的媒体格式了,起源于QuickTime。以前研究的时候就花了一番的功夫,尤其是如何把它完美的融入到视频点播应用中,更是费尽了心思,主要问题是处理mp4文件庞大的“媒体头”。当然,流媒体点播也可以采用flv格式来做,flv也可以封装H.264视频数据的,不过Adobe却不推荐这么做,人家说毕竟mp4才是H.264最佳的存储格式嘛。 这几天整理并重构了一下mp4文件的解转载 2016-10-10 17:00:24 · 1787 阅读 · 0 评论 -
例解 autoconf 和 automake 生成 Makefile 文件
转自:http://www.ibm.com/developerworks/cn/linux/l-makefile/index.html本文介绍了在 linux 系统中,通过 Gnu autoconf 和 automake 生成 Makefile 的方法。主要探讨了生成 Makefile 的来龙去脉及其机理,接着详细介绍了配置 Configure.in 的方法及其规则。引转载 2016-10-31 14:24:54 · 465 阅读 · 0 评论 -
内存屏障
set_mb(),mb(),barrier()函数究竟有何作用?#define mb() __asm__ __volatile__ ("lock; addl $0,0(%%esp)": ::"memory")1)set_mb(),mb(),barrier()函数追踪到底,就是 __asm____volatile__("":::"memory"),而这行代码就是内存屏障。2)__as转载 2016-11-23 09:46:40 · 544 阅读 · 0 评论 -
gdb调试技巧
一、准备:确保源文件存在,且与编译时的目录结构一致;二、进入gdb调试服务器端程序:gdb ./GameServer /core进入gdb界面后,设置跟进子进程(如果不设置该参数,父进程fork后gdb就无法跟进子进程了)set follow-fork-mode child三、常用参数:info locals: 打印局部变量what:打印对象类型bt/where:打印堆栈u...原创 2018-08-08 16:11:32 · 693 阅读 · 0 评论 -
log4cxx-0.10.0安装使用
CentOS-7.0x64 log4cxx-0.10.0安装包下载apr和apr-util:http://apr.apache.org/log4cxx:http://logging.apache.org/log4cxx/latest_stable/download.html#安装apr$ tar -zxvf apr-1.5.2.tar.gz$ cd apr-1.5.2$ ./con...原创 2018-08-06 17:55:07 · 1544 阅读 · 3 评论 -
How to Install gcc 4.7.x/4.8.x on CentOS(scl devtools)
gcc 4.7.2Tru Huynh of centos.org has built the redhat developer toolset 1.1, for centos and it contains gcc 4.7.2So you could simply use his repo and install just gcc, instantly.cd /etc/yum.repo原创 2017-04-07 00:06:14 · 703 阅读 · 0 评论 -
UDP涉及到的结构体和函数原型
涉及到的结构体和函数原型(一)涉及到的结构体1、struct in_addr struct in_addr { in_addr_t s_addr;};结构体in_addr 用来表示一个32位的IPv4地址.in_addr_t 一般为 32位的unsigned long,其字节顺序为网络顺序(network byte ordered),即该无符号整数采用大端字节转载 2017-01-25 14:44:53 · 1119 阅读 · 0 评论 -
gdb打印的变量值不准确问题
问题:gdb打印的变量值不准确问题1) gdb中list可以显示代码,说明debug信息是有编译进去。2) 设置断点后,使用"print xxx"查看变量,变量值不正确,但是在程序中打印是对的。3) 尝试编译使用-g和-gstabs+都不行。4) 写了一个测试demo,调试正常,无此现象。5) 调试过程中没有出现gdb内部警告或者错误提示。解决:编译使用-gdw原创 2016-11-25 12:56:42 · 2433 阅读 · 0 评论 -
C++ 用libcurl库进行http通讯网络编程
一、LibCurl基本编程框架libcurl是一个跨平台的网络协议库,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传, HTTP基本表单上传,代理,cookies,和用户认证。想要知道更多关于libcurl的介绍,可以到官网转载 2016-11-07 00:30:51 · 407 阅读 · 0 评论 -
使用libcurl作http请求线程卡在curl_multi_perform的问题
线上挂死时,gstack pid 获取的堆栈信息Thread 1 (Thread 0x7f766d1de7c0 (LWP 2899)):#0 0x0000003ca820e9c3 in recvfrom () from /lib64/libpthread.so.0#1 0x0000003ab920c133 in __libc_res_nsend () from /lib64/lib原创 2016-11-23 09:49:57 · 6118 阅读 · 0 评论 -
更新libcurl后yum命令报错
问题描述:新写的程序使用libcurl静态库, libcurl中的dns解析采用的是c-ares的异步解析,编译安装c-ares,curl后,执行yum安装软件报错[root@localhost usr]# yumThere was a problem importing one of the Python modulesrequired to run yum. The error原创 2016-11-23 10:40:30 · 2437 阅读 · 1 评论 -
vector中erase用法注意事项
以前就发现了vector中的erase方法有些诡异(^_^),稍不注意,就会出错。今天又一次遇到了,就索性总结一下,尤其是在循环体中用erase时,由于vector.begin()和vector.end()是变化的,因此就引入了错误的可能性。erase的函数原型有两种形式:iteratorerase(iterator position);iteratorerase(iterator f转载 2015-01-14 17:12:38 · 1820 阅读 · 0 评论 -
关于C++中的虚拟继承
1.为什么要引入虚拟继承虚拟继承是多重继承中特有的概念。虚拟基类是为解决多重继承而出现的。如:类D继承自类B1、B2,而类B1、B2都继承自类A,因此在类D中两次出现类A中的变量和函数。为了节省内存空间,可以将B1、B2对A的继承定义为虚拟继承,而A就成了虚拟基类。实现的代码如下:class Aclass B1:public virtual A;class B2:public vi转载 2014-11-30 15:48:18 · 501 阅读 · 0 评论 -
C/C++编译过程详解
原创 2014-05-06 01:42:58 · 1037 阅读 · 0 评论 -
C/C++的编译与运行
C/C++编译前,首先要对源代码执行预处理。预处理器(preprocessor)是一个简单的程序,它用程序员(利用预处理器指令)定义好的模式代替源代码中的模式(删除注释、包含其他文件以及执行宏),预处理后生成中间文件.i(文本)。接下来对于.i文件进行语法分析。编译器把源代码分解成小的单元并把它们按树形结构组织起来。表达式中“A + B”中的“A”、“+”和“B”就是语法分析树的叶子节点。语法分析原创 2014-05-06 01:31:50 · 857 阅读 · 0 评论 -
Valgrind 介绍
Valgrind是一个GPL的软件,用于Linux(For x86, amd64 and ppc32)程序的内存调试和代码剖析。你可以在它的环境中运行你的程序来监视内存的使用情况,比如C 语言中的malloc和free或者 C++中的new和 delete。使用Valgrind的工具包,你可以自动的检测许多内存管理和线程的bug,避免花费太多的时间在bug寻找上,使得你的程序更加稳固。Va转载 2014-03-30 16:49:37 · 662 阅读 · 0 评论 -
Linux下利用Valgrind工具进行内存泄露检测和性能分析
Valgrind通常用来成分析程序性能及程序中的内存泄露错误一 Valgrind工具集简绍Valgrind包含下列工具: 1、memcheck:检查程序中的内存问题,如泄漏、越界、非法指针等。 2、callgrind:检测程序代码的运行时间和调用过程,以及分析程序性能。 3、cachegrind:分析CPU的cache命中率、丢失率,用于进行代码优化。原创 2014-03-26 00:11:12 · 969 阅读 · 0 评论 -
Linux C内存泄露检测工具
在Linux下些C语言程序,最大的问题就是没有一个好的编程IDE,当然想kdevelop等工具都相当的强大,但我还是习惯使用kdevelop工具,由于没有一个习惯的编程IDE,内存检测也就成了在Linux下编写程序的一个大问题。 是不是说没有一种内存检查工具能够在Linux使用呢,也不是,像valgrind工具还是相当不错的。他的下载地址是http://valgrind.org/down原创 2014-03-26 00:08:02 · 949 阅读 · 0 评论 -
POSIX 线程详解
第一部分:一种支持内存共享的简捷工具POSIX(可移植操作系统接口)线程是提高代码响应和性能的有力手段。在本系列中,DanielRobbins 向您精确地展示在编程中如何使用线程。其中还涉及大量幕后细节,读完本系列文章,您完全可以运用 POSIX 线程创建多线程程序。线程是有趣的了解如何正确运用线程是每一个优秀程序员必备的素质。线程类似于进程。如同进程,线程由内核按时间分片转载 2014-02-11 22:49:57 · 861 阅读 · 0 评论 -
Linux进程间通信--信号,管道,消息队列,信号量,共享内存,socket
linux下的进程通信手段基本上是从Unix平台上的进程通信手段继承而来的。而对Unix发展做出重大贡献的两大主力AT&T的贝尔实验室及BSD(加州大学伯克利分校的伯克利软件发布中心)在进程间通信方面的侧重点有所不同。前者对Unix早期的进程间通信手段进行了系统的改进和扩充,形成了“system V IPC”,通信进程局限在单个计算机内;后者则跳过了该限制,形成了基于套接口(socket)的进程间转载 2014-02-11 20:27:15 · 1355 阅读 · 0 评论 -
[原]2014百度校招笔试题之动态链接库&静态链接库详解
1.什么是静态连接库,什么是动态链接库 静态链接库用通俗的话讲,静态库就是将代码编译到一个二进制文件下(通常扩展名为.LIB).然后客户端调用程序,只需要包含相关的.h文件及LIB库文件一起链接到exe文件中.可执行程序发布后,不再需要该.lib文件了. 动态链接库最终将编译出.lib与.dll文件. 注意.lib文件与上面的静态库虽然扩展名相同,但有本质的区别.动态库中的lib文转载 2013-12-12 21:24:50 · 697 阅读 · 0 评论 -
C++内存管理
转自:http://blog.csdn.net/zhanghefu/article/details/5003383内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理在C++中无处不在,内存泄漏几乎在每个C++程序中都会发生,因此要想成为C++高手,内存管理一关是必须要转载 2014-03-26 22:11:21 · 635 阅读 · 0 评论 -
C++ STL中的vector的内存分配与释放
1.vector的内存增长vector其中一个特点:内存空间只会增长,不会减小,援引C++ Primer:为了支持快速的随机访问,vector容器的元素以连续方式存放,每一个元素都紧挨着前一个元素存储。设想一下,当vector添加一个元素时,为了满足连续存放这个特性,都需要重新分配空间、拷贝元素、撤销旧空间,这样性能难以接受。因此STL实现者在对vector进行内存分配时,其实际分配的容量要比原创 2014-03-26 22:22:32 · 1946 阅读 · 0 评论 -
const用法详解
const用法详解面向对象是C++的重要特性. 但是c++在c的基础上新增加的几点优化也是很耀眼的就const直接可以取代c中的#define以下几点很重要,学不好后果也也很严重const1. 限定符声明变量只能被读 const int i=5; int j=0; ... i=j; //非法,导致编译错误 j=i; /转载 2014-04-10 23:45:08 · 903 阅读 · 0 评论 -
常用数据结构及复杂度
常用数据结构的时间复杂度Data StructureAddFindDeleteGetByIndexArray (T[])O(n)O(n)O(n)O(1)Linked list (LinkedList)O(1)O(n)O(n)O(n)Resizable array list (List)O(1)转载 2014-07-28 00:11:22 · 644 阅读 · 0 评论 -
用状态机实现XML解析器 - C++环境
这是我3年前写的代码,用C++实现一个XML解析器.现在再翻出来看,觉得还是有些可取之处,尤其是实现XML文本解析时采用的状态切换法 (姑且先这么叫吧,后文有详细解释这个方法的实现)不仅仅可以用来解析XML,几乎所有的文本流都可以用这种方法来解析 (我记得以前上编译原理时,讲到过词法分析器,用状态机 ,方法类似, 看来上课还是要认真听讲,不定什么时候就用上了.) 同时也有一些不足,主要是当时对UN转载 2014-09-06 02:38:46 · 1037 阅读 · 0 评论 -
C/C++ Linux 程序员必须了解的 10 个工具
1. 基本命令http://mally.stanford.edu/~sr/computing/basic-unix.htmlhttp://pangea.stanford.edu/computing/unix/shell/commands.phphttp://infohost.nmt.edu/tcc/help/unix/unix_cmd.html2. 编辑器– vi, Emacs转载 2014-08-21 00:46:55 · 634 阅读 · 0 评论 -
C\C++代码优化的27个建议
本文由 伯乐在线 - 周昌鸿 翻译自 cs.clemson.edu。欢迎加入技术翻译小组。转载请参见文章末尾处的要求。1. 记住阿姆达尔定律:funccost是函数func运行时间百分比,funcspeedup是你优化函数的运行的系数。所以,如果你优化了函数TriangleIntersect执行40%的运行时间,使它运行快了近两倍,而你的程序会运行快25%。这意味着不经转载 2014-05-26 23:20:25 · 645 阅读 · 0 评论 -
AIX dbx调试命令
原文:http://publib16.boulder.ibm.com/doc_link/zh_CN/a_doc_lib/cmds/aixcmds2/dbx.htmdbx是UNIX下基于命令行界面的程序调试器。 dbx是通过交互执行dbx子命令来达到调试的目的的。在调试程序前,必须先将-g选项包含在编译信息中,编译生成带调试信息的文件,即:cc -o filename -g file.c。原创 2014-02-24 23:00:19 · 4868 阅读 · 0 评论 -
AIX 5.3 安装valgrind 3.4.1
AIX 5.3 安装valgrind 3.4.1valgrind --tool=memcheck a.out==3350574== Memcheck, a memory error detector.==3350574== Copyright (C) 2002-2008, and GNU GPL'd, by Julian Seward et al.==3350574==转载 2014-03-30 16:46:43 · 1448 阅读 · 1 评论 -
在 AIX V5.3 中使用 MALLOCDEBUG 隔离并解决内存泄漏
引言在编写应用程序时进行动态内存分配是非常必要的。它可以在程序运行的过程中帮助分配?璧哪诖妫皇窃诮唐舳氖焙蚓徒蟹峙洹H欢行У毓芾碚庑┠诖嫱彩欠?常重要的。在大型的、复杂的应用程序中,内存泄漏是很常见的问题。当以前分配的一片?诖娌辉傩枰褂没蛭薹ǚ梦适保侨床⒚挥惺头潘敲炊杂诟媒汤此担嵋虼说贾?总的可用内存的减少,这时就出现了内存泄漏。尽管优秀的原创 2014-04-18 22:37:24 · 1109 阅读 · 0 评论