C/C++
文章平均质量分 61
chinaclock
这个作者很懒,什么都没留下…
展开
-
C++ 异常处理 入门
异常:程序执行期间,可检测到的不正常情况。例如:0作除数;数组下标越界;打开不存在的文件;远程机器连接超时;malloc失败等等。程序的两种状态:正常状态和异常状态,发生不正常情况后,进入异常状态,从当前函数开始,按调用链的相反次序,查找处理该异常的程序片断。1.throw 表达式语义:用表达式的值生成一个对象(异常对象),程序进入异常状态。Terminate函数,终止转载 2010-03-05 22:49:00 · 439 阅读 · 0 评论 -
singleton的实现与销毁(1) --modern c++读书笔记
## singleton的实现与销毁(1) –modern c++读书笔记## 1.Singleton的基本实现和注意点 Instance若是作为Singleton的静态成员对象。若是同样适用pInstance作为Singleton的静态成员指针。那么这两个版本有个重要差异: Instance被动态初始化(通过执行期间的Singleton构造函数调用),pInstance则受益于静态初始化(原创 2015-08-25 20:31:25 · 536 阅读 · 0 评论 -
死锁问题调试-思路分析
今儿晚上碰到一死锁问题,之前定位没定位出来,讨论问题时被人指出来了,感觉很羞愧。记录下,下次碰到类似死锁要有思路。咱们死锁一般有两种情况,1.线程A和线程B相互死锁。这种情况下,通过堆栈查找两个等待锁之间的依赖关系,还是比较好确定的。2.线程A自死锁,造成这种死锁的情况是自己加了锁之后,还没来得及释放,下次又继续等锁,而这种锁刚好又不是递归锁,就会出现自死锁的情况。针对于情况一原创 2015-09-09 20:18:51 · 2239 阅读 · 0 评论 -
Linux的文件描述符个数限制导致创建文件(或socket)失败的问题
碰到一个文件fd数量不足,导致socket创建失败的问题。而文件描述符即fd个数其实分为两种,一种是系统本身的总的限制个数,另一种是进程能够打开的具体的限制的个数。 系统最大打开文件描述符数:/proc/sys/fs/file-maxa. 查看$ cat /proc/sys/fs/file-max2. 设置a. 临时性# echo 1000000 > /原创 2015-09-10 17:38:00 · 5640 阅读 · 0 评论 -
Bug:__uClibc_main.c:(.text+0x20): undefined reference to `__fini_array_start'问题的解决
今天碰到了一个问题:__uClibc_main.c:(.text+0x20): undefined reference to `__fini_array_start' __uClibc_main.c:(.text+0x24): undefined reference to `__fini_array_end' /opt/toolchains/uclibc-crosstools-gcc-原创 2015-09-28 17:17:49 · 7534 阅读 · 0 评论 -
【C++模版之旅】神奇的Traits
摘自:http://blog.csdn.net/my_business/article/details/7891687#reply介绍traits的文章很多,但感觉大部分文章的说明都很晦涩难懂,把一个并不很复杂的C++模板的应用描述的过于复杂。忍不住想把自己的理解跟大家分享一下,或许我也只是掌握了一点traits的皮毛而已,但也希望这些皮毛能略微抓住你的眼球,带给你一些启发。转载 2015-11-11 10:43:00 · 363 阅读 · 0 评论 -
C++ 函数内部定义函数原型?
在一个函数内部这样写有意义吗?{ void m();}首先说一下函数是不能嵌套定义的。其次这里不是定义,只是个函数声明。函数声明的作用不用再问我了吧,C\C++语法规定,定义在当前语句之后函数,是不能直接使用的,因为函数的查找范围是从第一句找到当行所在行,如果没出现就会抛出未解析符号的错误你可以写在全局里,也可以只写转载 2015-12-28 22:06:34 · 4616 阅读 · 0 评论 -
内联函数的effective C++解释
Effective C++: 条款33: 明智地使用内联 内联函数——多妙的主意啊!它们看起来象函数,运作起来象函数,比宏(macro)要好得多(参见条款1),使用时还不需要承担函数调用的开销。你还能对它们要求更多吗?然而,你从它们得到的确实比你想象的要多,因为避免函数调用的开销仅仅是问题的一个方面。为了处理那些没有函数调用的代码,编译器优化程序本身进行了专门的设计。所以当内联一个函数时,编译器转载 2015-12-24 13:59:17 · 678 阅读 · 0 评论 -
也谈指针类型的区分
最近看了下之前的编程基础知识,发现虽然有很多工作中使用不算太频繁的,但是还是容易出错的地方。比如const变量,比如指针数组和数组指针,函数指针数组。结合之前看过的书籍,总的感觉是:把英语学好啊!按照英语的读法来进行辨别,*代表了pointer of,因为都是指针,所以按照顺序总是先读pointer,但是const是限定词,所以如果有const显然需要放在前面进行限定。下面举例原创 2015-12-27 14:35:09 · 726 阅读 · 0 评论 -
父类和子类中存在同一个成员变量
父类和派生的子类存在同一个成员变量名,是如何分配内存空间的? 在vs编译器中可以将源文件配置好后,看到内存布局:具体方法就是在vs的c++项目的属性中,添加/d1 reportAllClassLayout,注意添加到C/C++项目下的命令行中,不要放在链接器下的命令行中,否则会报错而且看不到内存布局。这样上面这个问题就可以直接看到了:#include "stdafx.h"class Base{原创 2015-12-27 21:17:29 · 1684 阅读 · 0 评论 -
对比windows和linux的对父进程的文件描述符继承的设置
需要实现一个fopen中的子进程是否继承父进程的文件句柄的功能。由于在多平台上,所以需要考虑windows和Linux及类Unix系统。Linux实现的阻碍:Linux中是默认子进程能够继承fd的。1.由于需要在fopen函数中实现,但是看了下关于O_CLOEXEC属性(since Linux 2.6.23)是在open函数中的。其含义就是在获取新的文件描述符时,使能close原创 2016-01-11 19:24:21 · 1546 阅读 · 0 评论 -
堆栈信息无法分析的调试总结
基本步骤:1.先利用echo t > /proc/sysrq-trigger,在/var/log/messages中获取进程中的各线程的系统调用信息2.若是futex等锁相关的,则可以合理怀疑是死锁3.到gdb中,用info reg命令,查看此时r0寄存器中的值val,然后将其用*(pthread_mutex_t*)val来进行查看,锁的相关信息4.若确认已经是死锁了,要查看相关堆原创 2016-01-11 20:48:53 · 1058 阅读 · 0 评论 -
/proc/sysrq-trigger文件的功能
摘自:1.http://blog.csdn.net/choice_jj/article/details/79656762.http://yueyemaitian.iteye.com/blog/1938533Shell代码 sudo sh -c 'echo w > /proc/sysrq-trigger' ; dmesg 不解,转载 2016-01-11 20:52:14 · 2617 阅读 · 0 评论 -
glibc代码走读笔记(一)
最近在整理底层库,遇到了不少问题都需要和glibc打交道,甚至内核的系统调用有关。这里将碰到的不熟悉的地方和有疑问的地方都记录下,方便交流和查看。首先从函数查找开始,不知道其他人是如何开始看glibc代码的,我看glibc是因为有函数实现不清,搞不懂原理。那么首先要查找函数,例如tzset函数,如果直接去按这个关键去搜,发现搜不到这个tzset的函数实现,但是搜到这么一个东西:原创 2015-02-13 16:55:39 · 2379 阅读 · 0 评论 -
Linux在C语言下的时区设置与修改(一)
清理当前使用底层OS适配库代码,代码中涉及到了utc时间和本地时间转换。发现代码中时区设置有问题。每次设置时区时都会调用tzset函数,然后直接使用被初始化后的全局变量timezone去和utc时间相加减得到本地时间。但是问题来了,这样做真的ok吗?tzset的函数,反复看了关于该函数初始化tzname和timezone的使用说明。在启动时第一次调用tzset,---首先是原创 2015-02-04 20:55:28 · 6568 阅读 · 0 评论 -
初遇资源泄漏
先来一段代码: 例如:void CXXXView::ShowImage() { SetRGBInfo(ImgWidth,ImgHeight); CDC* pDC=GetDC(); m_hDC=pDC->GetSafeHdc(); if(!full_screen) //非全屏模式 {原创 2010-04-22 17:37:00 · 1356 阅读 · 0 评论 -
谈谈重载(overload)覆盖(override)与隐藏、多态
摘自http://blog.csdn.net/yanjun_1982/archive/2005/09/02/470405.aspx谈谈重载(overload)覆盖(override)与隐藏 这三个概念都是与OO中的多态有关系的。如果单是区别重载与覆盖这两个概念是比较容易的,但是隐藏这一概念却使问题变得有点复杂了,下面说说它们的区别吧。 重载是指不同的函数使用相同的函数名,但是函数的参数个数或类型不同。调用的时候根据函数的参数来区别不同的函数。 覆盖(也叫重写)是指在派生类中重新转载 2010-07-03 20:07:00 · 691 阅读 · 0 评论 -
VC串口编程
<br />VC++串口编程<br /> <br />参考自:<br />http://dev.yesky.com/401/2308901.shtml<br /><br />http://www.gkong.com/co/chncla/learn_detail.asp?learn_id=16381<br /><br />1、API描述<br /> 在WIN32 API中,串口使用文件方式进行访问,其操作的API基本上与文件操作的API一致。<br /><br /> 一、打开串口<br />Win32 中用于原创 2010-07-05 20:09:00 · 3124 阅读 · 0 评论 -
fstream的使用方法介绍
<br />在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类有两个重要的运算符:<br />1、插入器(<<)<br /> 向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout<<"Write Stdout"<<' ';就表示把字符串"Write Stdout"和换行字符(' ')输出到标准输出流。<br />2、析取器(>>)<br /> 从流中输入数据。比如说系统有一个默认的标准转载 2010-08-01 23:34:00 · 579 阅读 · 0 评论 -
C++ STL 学习 :for_each与仿函数(functor)
C++ STL 学习 :for_each与仿函数(functor)(一)摘自网络作者: zieckey 时间: 2010-07-20 13:38:00先看wikipedia定义:<br />A function object, also called a functor, functional, or functionoid,[1] is a computer programming construct allowing an object to be invoked or called like it转载 2010-08-03 14:26:00 · 8411 阅读 · 0 评论 -
直接调用类成员函数地址
<br />直接调用类成员函数地址<br /><br />作者:南风<br />下载源代码<br />摘要:介绍了如何取成员函数的地址以及调用该地址.<br />关键字:C++成员函数 this指针 调用约定<br />一、成员函数指针的用法<br /> 在C++中,成员函数的指针是个比较特殊的东西。对普通的函数指针来说,可以视为一个地址,在需要的时候可以任意转换并直接调用。但对成员函数来说,常规类型转换是通不过编译的,调用的时候也必须采用特殊的语法。C++专门为成员指针准备了三个运算符: "::*"用于转载 2010-06-22 21:09:00 · 639 阅读 · 0 评论 -
类中函数指针的赋值
<br />例1<br />#include "stdafx.h"<br />#include <iostream.h> <br />#include <string.h> <br /> <br />class student <br />{ <br />protected: <br /> int num; <br /> char name[15]; <br />public: <br /> student(int no,char *pname):nu原创 2010-06-22 21:13:00 · 2850 阅读 · 0 评论 -
C++虚函数表与对象布局
每个含有虚函数的类有一张虚函数表(vtbl),表中每一项指向一个虚函数的地址,实现上是一个函数指针的数组。虚函数表既有继承性又有多态性。每个派生类的vtbl继承了它各个基类的vtbl,如果基类vtbl中包含某一项,则其派生类的vtbl中也将包含同样的一项,但是两项的值可能不同。如果派生类重载(override)了该项对应的虚函数,则派生类vtbl的该项指向重载后的虚函数,没有重载的话,则沿用基类的值。在类对象的内存布局中,首先是该类的vtbl指针,然后才是对象数据。在通过对象指针调用一个虚函数时,编译器生成转载 2010-10-12 14:33:00 · 648 阅读 · 0 评论 -
static关键字-void和void指针-函数指针
<br /><br /><br />static关键字<br />1.作用于变量:<br /> 用static声明局部变量-------局部变量指在代码块{}内部定义的变量,只在代码块内部有效(作用域),其缺省的存储方式是自动变量或说是动态存储的,即指令执行到变量定义处时才给变量分配存储单元,跳出代码块时释放内存单元(生命期)。用static声明局部变量时,则改变变量的存储方式(生命期),使变量成为静态的局部变量,即编译时就为变量分配内存,直到程序退出才释放存储单元。这样,使得该局部变量有记忆功能,可以转载 2010-10-14 08:35:00 · 836 阅读 · 0 评论 -
c语言中volatile关键字
volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改。用volatile关键字声明的变量i每一次被访问时,执行部件都会从i相应的内存单元中取出i的值。没有用volatile关键字声明的变量i在被访问的时候可能直接从cpu的寄存器中取值(因为之前i被访问过,也就是说之前就从内存中取出i的值保存到某个寄存器中),之所以直接从寄存器中取值,而不去内存中取值,是因为编译器优化代码的结果(访问cpu寄存器比访问ram快的多)。以上两种情况的区别在于被编译转载 2010-10-14 08:43:00 · 372 阅读 · 0 评论 -
深入理解sizeof
深入理解sizeof作者:房秉毅 最近在论坛里总有人问关于sizeof的问题,并且本人对这个问题也一直没有得到很好的解决,索性今天对它来个较为详细的总结,同时结合strlen进行比较,如果能对大家有点点帮助,这是我最大的欣慰了。一、好首先看看sizeof和strlen在MSDN上的定义:首先看一MSDN上如何对sizeof进行定义的:sizeof Operatorsizeof expressionThe sizeof keyword gives the amount of storage,转载 2010-10-15 20:52:00 · 446 阅读 · 0 评论 -
C/C++经典排序算法
<br />排序算法是一种基本并且常用的算法。由于实际工作中处理的数量巨大,所以排序算法对算法本身的速度要求很高。<br /> 而一般我们所谓的算法的性能主要是指算法的复杂度,一般用O方法来表示。在后面我将给出详细的说明。 <br /> 对于排序的算法我想先做一点简单的介绍,也是给这篇文章理一个提纲。<br /> 我将按照算法的复杂度,从简单到难来分析算法。<br /> 第一部分是简单排序算法,后面你将看到他们的共同点是算法复杂度为O(N*N)(因为没有使用word,所以无法打出上标转载 2010-10-19 22:24:00 · 436 阅读 · 0 评论 -
Effecitve C++读书笔记(一)
最近工作中开始又使用C++了,而且应用软件的开发C语言确实有了一定的局限。所以还是准备多看一些关于C++的书籍,总结下。视C++为一个语言联盟,我个人觉得这是一个绝妙的想法。因为C++和C的纠葛不清,但是又因为是一门高级的面向对象的语言。所以在理解起来总是有那么些不太对劲的地方。但是视C++为一个语言联盟,将C++语言特性分开成四个次语言的语言特点,似乎思路和脉络都非常清晰。C的blo原创 2013-09-10 00:04:45 · 755 阅读 · 0 评论 -
关于close_wait状态的问题分析
目前碰到一个socket连接大量卡在close_wait状态的问题。经过百度,bing查找资料分析。用netstat查看连接的状态,发现有的连接状态在sync_recv状态,有的连接在close_wait。然后新的连接一直都无法建立。1.初步怀疑是连接一直不释放,导致fd不够用。但是通过到进程下的proc/进程号/fd目录下去查看当前open的fd个数,以及ulimt -a查看原创 2016-01-13 21:39:39 · 3330 阅读 · 0 评论