04 2014 档案

sizeof(结构体)和内存对齐以及位域
摘要:Win32平台下的微软C编译器的对齐策略:1) 结构体变量的首地址能够被其最宽基本类型成员的大小所整除;备注:编译器在给结构体开辟空间时,首先找到结构体中最宽的基本数据类型,然后寻找内存地址能被该基本数据类型所整除的位置,作为结构体的首地址。将这个最宽的基本数据类型的大小作为上面介绍的对齐模数。2... 阅读全文

posted @ 2014-04-25 11:23 胡永光 阅读(310) 评论(0) 推荐(0) 编辑

C++ 虚函数表 多重继承
摘要:上次研究的是单继承的情况,这次研究多重继承下的虚函数表的排列情况。 这次A,A1,A2,B这几个类的继承关系如下图: 测试代码如下:#includeusing namespace std;class A{... 阅读全文

posted @ 2014-04-23 00:09 胡永光 阅读(443) 评论(0) 推荐(0) 编辑

C++ 虚函数表 单继承
摘要:本文研究单继承情况下,c++对象的虚函数表的具体情况。 假设有两个类A,B, 其中B由A派生出来,A含有虚函数fun1,B含有虚函数fun2。测试的代码如下:#includeusing namespace std;class A{public: vir... 阅读全文

posted @ 2014-04-22 23:35 胡永光 阅读(161) 评论(0) 推荐(0) 编辑

私有继承
摘要:C++编程语言中,在声明一个派生类时将基类的继承方式指定为private的称为私有继承,用私有继承方式建立的派生类称为私有派生类(private derived class),其基类称为私有基类(private base class)。如果两个类之间的继承关系为私有或者保护,编译器一般不会将派生类... 阅读全文

posted @ 2014-04-22 10:36 胡永光 阅读(281) 评论(0) 推荐(0) 编辑

内联函数和宏定义的区别
摘要:两者区别如下:内联函数在编译器时展开,宏在预编译时展开。在编译的时候内联函数可以直接被嵌入到目标代码中,而宏只是一个简单的文本替换。内联函数可以完成诸如类型检查、语句是否正确等编译功能,宏就不具有这样的功能。宏不是函数,inline函数是函数。宏在定义时要小心宏参数(一般情况是把参数... 阅读全文

posted @ 2014-04-17 22:47 胡永光 阅读(174) 评论(0) 推荐(0) 编辑

#pragma pack(x) CPU对齐
摘要:编译器会尽量把成员对齐以提高内存的命中率。对齐是可以更改的,使用"#pragma pack(x)“ 可以改变编译器的对齐方式。 C++固有类型的对界取编译器对齐方式与自身大小中较小的一个。例如,指定编译器按2对齐,int 类型的大小是4,则int 的对界为2和4中较小的2。在默认的对... 阅读全文

posted @ 2014-04-17 21:49 胡永光 阅读(219) 评论(0) 推荐(0) 编辑

static 变量(静态变量)
摘要:在C++的面向对象编程中,static还可以加在类的数据成员或成员函数之前。这样定义的数据成员或成员函数就被类所拥有,而不再属于类的对象。#include using namespace std;class widget{ public: widget() { ... 阅读全文

posted @ 2014-04-17 00:15 胡永光 阅读(253) 评论(0) 推荐(0) 编辑

C++ 中const作用
摘要:一、对const与#define的特点及区别的理解 #define只是用来做文本替换的,#define常量的生命周期止于编译期,它存在于程序的代码段,在实际程序中它只是一个常数,一个命令中的参数,并没有实际的存在。 const常量存在于程序的数据段,并在堆栈中分配了空间。c... 阅读全文

posted @ 2014-04-16 23:05 胡永光 阅读(250) 评论(0) 推荐(0) 编辑

如何连接宏参数
摘要:#include#define CONS(a,b) (int)(a##e##b)#define STR(s) #sint main(){ printf(STR(huawei)); printf("\n"); printf("%d\n",CONS(2,3)); return 0;}在本程序中... 阅读全文

posted @ 2014-04-16 22:09 胡永光 阅读(293) 评论(0) 推荐(0) 编辑

main函数之后的调用
摘要:main函数代表进程的主线程。程序开始执行时,系统为程序创建一个进程,main函数其实并不是首先被调用的函数,而是操作系统调用了C/C++运行期启动函数,该函数负责对C/C++ 运行期库进行初始化。它还能够保证已经声明了的任何全局对象和静态对象能够在代码执行之前正确的创建。 ... 阅读全文

posted @ 2014-04-16 18:53 胡永光 阅读(250) 评论(0) 推荐(0) 编辑

C++语言编译系统提供的内部数据类型的自动隐式转换
摘要:C++语言编译系统提供的内部数据类型的自动隐式转换规则如下:程序在执行算术运算时,低类型自动隐式转换为高类型。在函数调用时,将实参值赋给形参,系统隐式的将实参转换为形参的类型,并赋值给形参。函数有返回值时,系统自动的将返回表达式类型转换为函数类型,并赋值给调用函数。 当在... 阅读全文

posted @ 2014-04-16 13:31 胡永光 阅读(131) 评论(0) 推荐(0) 编辑

linux 服务器网络有关的内核参数
摘要:几乎所有的内核模块,包括内核核心模块和驱动程序,都在/proc/sys 文件系统下提供了某些配置文件以提供用户调整模块的属性和行为。通常一个配置文件对应一个内核参数,文件名就是参数的名字,文件的内容是参数的值。 我们可以通过命令sysctl -a 查看所有这些内核参数。下面说明与网络... 阅读全文

posted @ 2014-04-15 12:34 胡永光 阅读(149) 评论(0) 推荐(0) 编辑

linux 最大文件描述符
摘要:Linux对应用程序能打开的的最大文件描述符数量有两个层次的限制:用户级限制和系统级限制。 用户级限制是指目标用户运行的所有进程总共能打开的文件描述符数。 系统级的限制是指所有用户总共能打开的文件描述符数。下面这个命令是最常用的的查看用户级文件描述符限制的方法:#ulimit ... 阅读全文

posted @ 2014-04-15 10:29 胡永光 阅读(229) 评论(0) 推荐(0) 编辑

利用mmap /dev/mem 读写Linux内存
摘要:使用 hexedit /dev/mem 可以显示所有物理内存中的信息。 运用mmap将/dev/mem map出来,然后直接对其读写可以实现用户空间的内核操作。以下是我写的一个sample#include#include#include#include#include#includeint mai... 阅读全文

posted @ 2014-04-03 19:33 胡永光 阅读(2654) 评论(0) 推荐(0) 编辑

导航

点击右上角即可分享
微信分享提示