
c/c++
Johnblx
征实则效存,徇名则功浅
展开
-
c/c++ 无符号数减法
unsigned int a = 2;unsigned int b = 3;unsigned int c = a- b;printf("%u \r\n", c);4294967295a : 补码 0x00000002b: 补码 0x00000003a-b a补 + b反 + 1 0 0 ... 0 0 0 0 0 0 1 0...原创 2020-02-11 20:50:53 · 1009 阅读 · 0 评论 -
linux c/c++ 程序崩溃时打印调用栈
本文章是在总结前人的帖子后实现的,经过验证是可以使用的。但是在个别信号下,还是不能详细的打印有效信息。void dump(void){ char szLog[MAX_LOG_LEN] = {0}; int j, nptrs; const int BACKTRACE_SIZE = 16; void *buffer[BACKTRACE_SIZE...转载 2018-04-27 16:29:46 · 4433 阅读 · 1 评论 -
C++ 拷贝构造函数和重载赋值操作符不能相互调用
C++ 拷贝构造函数和重载赋值操作符不能相互调用转载 2014年02月14日 09:35:05795拷贝构造函数调用重载赋值操作符,重载赋值操作符调用拷贝构造函数的写法都是没有意义的。首先:拷贝构造函数的存在意义--------是通过已有的对象构造新的对象,构造完毕后才有两个对象;重载赋值操作符的意义-----------将一个对象的值赋给另一个对象,两个对象都已经构造完毕了。拷贝构造函数----...转载 2018-04-14 18:06:41 · 673 阅读 · 0 评论 -
enum类型的本质
enum类型的本质 至从C语言开始enum类型就被作为用户自定义分类有限集合常量的方法被引入到了语言当中,而且一度成为C++中定义编译期常量的唯一方法(后来在类中引入了静态整型常量)。 根据上面对enum类型的描述,到底enum所定义出来的类型是一个什么样的类型呢?作为一个用户自定义的类型其所占用的内存空间是多少呢?使用enum类型是否真的能够起到有限集合常量的边界转载 2015-11-04 10:18:05 · 729 阅读 · 0 评论 -
UDP 丢包
一、主要丢包原因1、接收端处理时间过长导致丢包:调用recv方法接收端收到数据后,处理数据花了一些时间,处理完后再次调用recv方法,在这二次调用间隔里,发过来的包可能丢失。对于这种情况可以修改接收端,将包接收后存入一个缓冲区,然后迅速返回继续recv。2、发送的包巨大丢包:虽然send方法会帮你做大包切割成小包发送的事情,但包太大也不行。例如超过50K的一个udp包,不切割直接通过sen转载 2015-07-06 16:11:17 · 897 阅读 · 0 评论 -
工厂 模式
设计模式一 工厂模式Factory 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的。但是在一些情况下, new操作符直接生成对象会带来一些问题。举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对象之前必须先生成一些辅助功能的对象。转载 2015-05-26 13:40:52 · 563 阅读 · 0 评论 -
线性地址转物理地址
二、线性地址转物理地址前面说了Linux中逻辑地址等于线性地址,那么线性地址怎么对应到物理地址呢?这个大家都知道,那就是通过分页机制,具体的说,就是通过页表查找来对应物理地址。准确的说分页是CPU提供的一种机制,Linux只是根据这种机制的规则,利用它实现了内存管理。在保护模式下,控制寄存器CR0的最高位PG位控制着分页管理机制是否生效,如果PG=1,分页机制生效,需通过页表查找才能把转载 2015-05-18 15:16:33 · 1208 阅读 · 1 评论 -
__attribute__
要了解Linux Kernel代码的分段信息,需要了解一下gcc的__attribute__的编绎属性或定义的函数或数,__attribute__主要用于改变所声明据的特性,它有很多子项,用于改变作用对象的特性。比如对函数,noline将禁止进行内联扩展、noreturn表示没有返回值、pure表明函数除返回值外,不会通过其它(如全局变量、指针)对函数外部产生任何影响。但这里我们比较感兴趣的是对代转载 2015-05-14 14:56:37 · 586 阅读 · 0 评论 -
字符数组
如果你定义一个char a[10],那么系统会“只分配”10个char这么长的内存区域,一个char是一个字节,那么系统会分配十个字节的内存控件,并且将这一片连续的内存空间的首地址赋值给a。也就是说“数组名的值是数组所在内存区域的首地址”换句话说“数组名是一个指针,指向数组第一个值的地址”。如果你定义一个char a[] = “abcdefg”;这句代码就复杂点了。定义一个数组,数组长度未转载 2014-12-18 17:27:46 · 627 阅读 · 0 评论 -
c++ const 数据成员
c++ const 数据成员const修饰的成员常量,该常量的内存地址是分在常量区。如果该成员常量的值被确定是在对象呗构造之后。也即是说该常量是属于某一个对象的。而static修饰的静态变量也是存放在静态存储区。他是属于一个类的,并不是专属于某一个对象。而且这个值是可以改变的。该值的初始化是在编译阶段就完成的。现在的一个问题是static const修饰的成员常量存放原创 2013-07-04 15:02:20 · 1106 阅读 · 0 评论 -
Makefile 的 export
from http://againinput4.blog.163.com/blog/static/172799491201132693532418/1.在(parent,上层的)makefile中export出来变量,子makefile(sub make)中,是可以访问的。2. 而同一级别的makefile(可通过makefile中内置变量MAKELEVEL查看得知当前makefi转载 2014-02-19 11:34:17 · 1046 阅读 · 0 评论 -
linux 链接脚本
http://blog.youkuaiyun.com/jiangyuping_fyl/article/details/7293420转载 2014-02-25 16:59:47 · 759 阅读 · 0 评论 -
代码优化,编译优化
在linux的编译过程中,可能对代码进行优化,遇到的一个有趣的问题是:在调试的过程中,我想查看一下出现的逻辑位于第几次循环,所以就在该逻辑上加了如下语句if(0 == result){ num = num+0;}结果就悲催了,无论result是不是都等于0, num = num+0;这一句是都会走到的。原创 2013-11-14 21:28:36 · 643 阅读 · 0 评论 -
vim 在光标所在行使用快捷键 插入指定的字符串
map i/************************************************************************************************oi*@parameter [] oi*@parameter [] oi*@parameter [] oi*@parameter [] oi*@description oi*@ret原创 2013-08-05 14:21:57 · 2701 阅读 · 0 评论 -
c++ 类对象的大小
如果有一个接口类,没有数据成员: 接口类的大小因为有虚函数列表(大小为4)还有一个接口类的实现类。那么这个实现类的大小是多少?接口类的大小,加上自身数据成员的大小。如果父类不是接口,而是就是一个没有数据成员的普通类父类的对象大小就是1子类的大小,并没有把这个1加进去。原创 2013-08-04 11:18:12 · 880 阅读 · 0 评论 -
c++ placement new 不检查size的值
在使用c++ 的placement new的时候,并不检查size的值,传入的指针可能指向的内存地址只有3字节,而你去执行new(charArray)int居然也是可以执行成功的。如果传入的指针式NULL,可定返回值也是NULL了。这里主要是理解placementnew 只是在你给的内存上做初始化。并不检查size。原创 2013-07-19 10:50:39 · 1017 阅读 · 0 评论 -
c/C++ 通信协议里面的帧结构
通信协议里面的帧结构 在网络上发送消息帧会有许多问题值得注意,所以现在纯文本的协议越来越火。首先在c/C++中使用struct会有对其格式,而且这种对其格式是编译器决定的。所以你不能确定你定义的struct会被接收方正确识别。在c中提供了一个1字节对其的宏PACK#pragma pack(push,1)struct{...}#pragma pack po原创 2013-07-17 19:12:20 · 3557 阅读 · 0 评论