自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 收藏
  • 关注

原创 static 全局变量的使用

当我们要使用一个全局变量时,往往会在头文件中进行定义,然后使用该变量的地方包含该头文件比如://comm.hint g_val;然后在使用该变量的地方,include该头文件即可。如果这样使用你就错了。 int g_val; 该语句实际上不止是声明,也是定义,会导致程序中有多个这个变量的定义。c++编译器会给出muti-define的错误。此时即使加上stati

2013-01-08 16:56:44 339

转载 gcc 编译优化选项

-O0:这个等级(字母“O”后面跟个零)关闭所有优化选项,也是CFLAGS或CXXFLAGS中没有设置-O等级时的默认等级。这样就不会优化代码,这通常不是我们想要的。 -O1:这是最基本的优化等级。编译器会在不花费太多编译时间的同时试图生成更快更小的代码。这些优化是非常基础的,但一般这些任务肯定能顺利完成。 -O2:-O1的进阶。这是推荐的优化等级,除非你有特殊的需求。-O2会比-O1启用

2012-06-04 16:35:38 405

转载 gdb调试C++ STL

原文链接:http://blog.csdn.net/luoleicn/article/details/5968038GDB中print方法并不能直接打印STL容器中保存的变量,其实只要http://www.yolinux.com/TUTORIALS/src/dbinit_stl_views-1.03.txt这个文件保存为~/.gdbinit  就可以使用它提供的方法方便调试容器

2012-05-18 16:44:31 783

原创 c++中利用宏来声明和定义变量

假设我们要定义一个配置类,类中包含了很多的配置成员,有一种通过宏的方法可以让我们方便的维护繁多的成员在一个类中,定义一个变量需要类型,构造函数中给出的初始值。我们需要能够像脚本语言一样进行配置变量:tconfig.hOPTION(m_data,OPT_INT,-1)OPTION(m_value,OPT_DOUBLE,1)OPTION(m_change,OPT_FLOAT

2012-05-08 19:09:51 5811

转载 Linux系统的常用操作命令大全

转载自:http://hi.baidu.com/jackywdx/blog/item/393ccf4b64268bf482025cde.html系统# uname -a # 查看内核/操作系统/CPU信息# head -n 1 /etc/issue # 查看操作系统版本# cat /proc/cpuinfo # 查看CPU信息# hostna

2011-12-14 20:29:16 453

转载 vim 搜索命令

VIM查找命令VIM命令功能f向前搜索并将光标停留在目标字符上F向后搜索并将光标停留在目标字符上;重复刚才的查找,反向重复刚才的查找t向前搜索并将光标停留在目标字符的前一个字符上T向后搜索并将光标停留在目标字符的后一个字

2011-11-11 10:04:35 715

转载 c++中虚继承机制 内存布局

http://www.cnblogs.com/itech/archive/2009/03/01/1399996.html[C++对象模型][9]虚继承与虚函数表一 虚继承1) 代码:Code#include iost

2011-10-17 22:14:23 389

原创 linux文件的权限

每个文件都有9个权限位:用户的读取执行权限,组的读写执行权限,其他的读写执行权限,分别对应9位。三位一组,8进制数。目录: 当要访问一个目录下的文件时,需要有该目录的可执行权限。目录的可执行权限位也成为搜索位。对目录的读权限意味着在读取该目录下所有文件的列表。对目录的

2011-10-07 19:19:08 279

原创 基础网络知识

OSI模型: 应用层、表示层、会话层,传输层,网络层,数据链路层,物理层。TCP/IP协议模型: 应用层(SMTP、FTP、DNS)、传输层(TCP/UDP)、网络层(IP、ICMP)、网络接口层ping是应用层直接使用网络层ICMP报文。这种询问报文用来测试目的站是否可

2011-10-07 12:05:43 302

转载 c++ 函数名字 重载

作者:吴秦出处:http://www.cnblogs.com/skynet/写在前面:函数重载的重要性不言而明,但是你知道C++中函数重载是如何实现的呢(虽然本文谈的是C++中函数重载的实现,但我想其它语言也是类似的)?这个可以分解为下面两个问题1

2011-09-28 23:21:45 845

原创 c程序内存布局

当一个程序被编译连接为可执行程序时,对于c/c++语言的程序,其内存布局主要是代码段和数据段。代码段text 存放可以执行的代码,拥有可执行权限,一般是只读的。代码段在执行时一般都需要访问内存数据,即数据段的内容。数据段包括以下部分:1 初始化数据区data:存放已经初始

2011-09-28 22:42:38 319

转载 C/C++程序编译的过程

gcc编译c/c++程序为可执行文件的过程实际包括以下几步,假人我们要编译的文件为t.c:1 预编译:由预处理器cpp执行, 可以通过命令cpp -o t.i t.c 进行。 gcc -E t.c -o t.i这一步预处理器把所有include的文件包括递归包含的文件

2011-09-27 21:48:18 421

原创 C++虚函数表

考虑最简单的有虚函数的继承关系:class F{public:virtual void func() {printf("F func\n");}};class S : public F{public:virtual void func(

2011-09-27 18:08:32 299

原创 inline 与 virtual

函数前面加了inline是向编译器进行建议,将该函数定义为内联函数,编译的时候,在调用该函数的位置进行展开。但只是一种建议,不能强制编译器执行。我们知道虚函数是c++多态的一种方式。在继承层次的虚函数关系下,具体调用哪一个虚函数是运行时决定的。在这种情况下的虚函数加了inli

2011-09-27 11:35:38 566

原创 sizeof

sizeof 返回一个对象或者类型名的长度,返回值的类型为size_t,其结果是编译时常量。1 所有的指针大小同等于机器字长2 int 在32位和64位上一般是4字节。long 同等于机器字长。3 sizeof不对表达式进行运算,只取表达式结果

2011-09-27 10:47:09 279

原创 B树 B+树 B*树

1 B 树:一棵m阶的B树,约束条件如下:a 树中一个节点最多有m棵子树,这也是m阶的含义。b 若根节点有孩子,至少有两棵子树。c 除根节点之外的所有非叶子节点至少有[m/2](上界) 棵子树。d 所有的非终端节点包括的信息有:n(该节点含有的关键字数目)

2011-09-26 11:27:18 1708

原创 linux sys_call

每个系统调用都会有一个编号与之相对应。用户态调用一个系统调用,实际上调用运行时库(glibc)中的函数,runtime library会通过80号中断,陷入内核态,通过eax寄存器传递要调用系统调用编号,参数的传递通过寄存器或者copy_to_user等函数,实际通过页面缓存进行

2011-09-26 10:00:33 694

原创 select与epoll,多路IO复用

当一个节点建立了与多个节点之间的连接时,如何去高效的处理多个连接的数据呢?可能有的连接有数据,有的连接没有数据,这中情况下,我们总不能一个个的去recv尝试吧? linux下面给我们提供了select和epoll两组接口以处理这种情况。1 select:

2011-09-24 22:04:15 1004

原创 最长递增子序列问题

设有n个数,求这个数组中最长的递增子序列。 子序列不必在原数组中是连续的。即有:A0,A1,A2 ... An-1,求出序列: Aj1,Aj2,...Aik  该序列递增,并且其中: j1 例如对于数组: 2,3,11,6,8,4,7,12,1,9最长递增子序

2011-09-18 21:26:03 258

原创 linux下的线程

1 什么是线程: 线程包含了进程内执行环境的必需信息:进程中标识线程的线程ID、一组寄存器、栈、调度优先级和策略、信号屏蔽字、errno遍历以及线程私有数据。进程中的所有信息对线程都是共享的,包括可执行程序的文本,程序的全局变量和堆内存、栈以及文件描述符。linux线

2011-09-08 20:06:30 376

原创 container_of

在linux内核中经常遇到container_of宏,定义如下:#define container_of(ptr, type, member) ({             /         const typeof( ((type *)0)->member ) *__

2011-09-05 18:03:46 271

原创 tcp keep_alive

我们知道TCP连接关闭时,需要连接的两端中的某一方发起关闭动作,如果某一方突然断电,另外一端是无法知道的。tcp的keep_alive就是用以检测异常的一种机制。有三个参数:1 发送心跳消息的间隔2 未收到回复时,重试的时间间隔3 重试的次数  如果是Linu

2011-08-31 13:05:25 3792

原创 大端小端网络字节顺序

源自格列佛游记,小人国因为从鸡蛋的大端(Big-endian)还是鸡蛋的小端(Little-endian)敲开而发生战争。大端是 最高有效位(MSB) 位于地址的低位,小端则是MSB位于地址的高位。假如16进制的数0x12345678(我们在写一个数的时候,高位总是在最左边)===内存从低到高===>大端:12345678小端:78563412IP协议中规定网络协议以大端为准。x86系列CPU都是

2011-07-02 17:06:56 413

转载 (转)一些鲜为人知的编程真相

1. 一个程序员用在写程序上的时间大概占他的工作时间的10-20%,大部分的程序员每天大约能写出10-12行的能进入最终的产品的代码 — —不管他的技术水平有多高。 好的程序员花去90%的时间在思考、研究和实验,来找出最优方案。差的程序员花去90%的时间在调试问题程序、盲目的修改程序,期望某种写法能可行。“一个卓越的车床工可以要求比一个一般的车床工多拿数倍高的工资,但一个卓越的软件写手的价

2011-06-19 12:56:00 348

原创 vim 自动补全类的成员

<br />vim 自动集成了一些补全。最常用的是^+N,局部变量的补全。<br /> <br />要补全类的成员,需要额外的插件,方法如下:<br /> <br />1 首先安装ctags。<br />   并且创建tags的时候,需要参数:<br /> <br />    --c++-kinds=+p  : Adds prototypes in the database for C/C++ files.<br />    --fields=+iaS   : Adds inheritance (i), a

2011-05-14 14:44:00 2552

转载 vim 配置文件

" 不要使用vi的键盘模式,而是vim自己的set nocompatible" 显示行号set nu " 为C程序提供自动缩进set smartindent" 语法高亮set syntax=on" 去掉输入错误的提示声音set noeb" 在处理未保存或只读文件的时候,弹出确认"set confirm" 自动缩进set autoindentset cindent" Tab键的宽度set tabstop=4" 统一缩进为4set softtabstop=4set shiftwidth=4" 不要用空格代替制表

2011-03-10 09:46:00 351

原创 c++类型重载 : 避免对指针和数字重载

<br />effctive c++ 条款25:避免对指针和数字重载<br /> <br />因为重载后,指针会被解析为整型,与数字的重载混淆。<br />比如以自定义类型的指针为key建立map,即使你定义了该类的对<的重载,但c++会把对指针的比较以为是对整型的比较,不会调用自定的类型比较。只能传递自定义的比较函数。

2011-03-03 11:32:00 493

原创 c++ map

<br />map set中使用自定义的类型时,需要实现比较操作。注意不能定义为类内部的比较符,因为stl中定义的是要传递两个对象。<br />比如我们有如下定义:<br />#include <map><br />using namespace std;<br /><br /><br />struct T{<br />    T(){}<br />    int a;<br />    int b;<br />    inline bool operator < (const T

2011-03-02 13:13:00 391

原创 c++对象模型 内存布局

<br />比如一个类:<br />class T<br />{<br />public:<br />   void Func();<br />   virtual void Func2();<br />private:<br />    int a;<br />    int b;<br />};<br /> <br />sizeof(T)的大小,如果没有虚函数,那么只有数据成员存储在数据段,那么其大小就相当于struct T{int a; int b;};的大小。如果没有任何数据成员,sizeof会返回

2010-08-23 12:31:00 263

原创 Linux 简单的字符文件驱动

<br />字符设备是Linux 设备驱动中最简单的。<br />struct cdev<br />{<br />    struct kobject *kobj;<br />    struct module *owner;   //所属模块<br />    struct file_operations *ops;<br />    struct list_head_list;<br />    dev_t dev;<br />    unsigned int count;<br />};<br />1

2010-08-20 17:22:00 416

原创 Linux 内核模块之hello world

Linux系统内核运行于一个单独的保护区中,但是运行内核在运行时动态的添加或者删除代码,这些代码包括了相关的数据 函数入口 出口并被组合在一个单一的二进制镜像中,即可装载内核模块,简称为模块。一个最简单的模块组建过程如下://hello world 模块源码#include #include #include static int __init hello_init(){    printk("Hello World/n");}static void __exit hello_e

2010-08-18 16:00:00 335

原创 Linux 命令行参数解析

<br />1 getopt<br />#include <unistd.h><br /> int getopt(int argc, char * const argv[], const char *optstring);<br />extern char *optarg;<br />extern int optind, opterr, optopt;<br /> <br />argc argv是main函数的参数,optstring定义了命令行的使用方法。<br />比如你想这样使用一个命令:<br

2010-08-05 20:25:00 596

原创 Linux计时器

Linux中用户态可以使用的计时器主要有alarm和timer.timer可以提供更加精确的时间,alarm只能精确到秒。#include int getitimer(int which, struct itimerval *curr_value);int setitimer(int which, const struct itimerval *new_value,struct itimerval *old_value);struct itimerval {               struct t

2010-08-02 11:21:00 4146 1

原创 Linux信号的使用

信号是软件中断,信号提供了一种处理异步事件的方法。1 signal函数#include void (* signal(int signo, void (*func)(int) ) ) (int);通过typedef 可以使得该函数的形式比较简单。typedef void sigfunc(int);sigfunc  *signal(int signo, sigfunc *func);该函数使得当进程收到指定的信号时调用对应的函数。func的值为SIG_IGN(忽略),SIG_DFL(默认),或者对应的函数地址

2010-07-29 19:57:00 2182

原创 Linux进程通信--信号量

Semaphores 信号量主要用于进程对共享资源的互斥访问。为了取得对一个共享资源,进程测试信号量的值,如果为正,表示还有资源可以访问,该进程对信号量加减一。如果为0表示没有资源可以用,该进程应当休眠等待信号量的值再次为正。Linux中的信号量使用起来是比较麻烦的。在这里,信号量是以集合形式存在的,创建时要给出信号量的数目,并且信号量集合即使没有任何进程访问时,也是存在于系统中的。要注意对其的销毁工作。每个信号量由以下结构体定义:struct {unsigned short  semval; //信号量的

2010-07-29 15:43:00 841

原创 Linux进程通信方法--管道

进程通信的基本方法:管道

2010-07-28 16:30:00 278

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除