摘要: 一、进程 与 线程:1. strace命令:跟踪进程系统调用的情况。strace -o output.txt -T -tt -e trace=all -p 28979strace -T 记录每个系统调用所花费的时间strace -t (或者 -tt)记录每个系统调用发生时的时间(时分秒的格式)strace -s 1024 显示系统调用参数时,对于字符串显示的长度, 默认是32,如果字符串参数很长,很多信息显示不出来, 则可以使用strace -s 1024strace -e trace=nanosleep 只记录相关的系统调用信息。-e trace=network // 只记录和网络api相关 阅读全文
posted @ 2014-03-12 11:03 yaozhaoyz 阅读(213) 评论(0) 推荐(0) 编辑
摘要: Python中自带的堆heapq,不支持自定义的比较函数。 这导致,heapq中的元素,如果是结构体的话,不太方便。实现了一个支持自定义比较函数的Heap类。import heapqimport randomclass MyHeap(object): def __init__(self, initial=None, key=lambda x:x): self.k = 20 # the Size of this Heap self.key = key self._data = [] def push(self, item): ... 阅读全文
posted @ 2014-03-12 11:02 yaozhaoyz 阅读(2308) 评论(0) 推荐(0) 编辑
摘要: 1 char str[100]="changedStr"; 2 3 char *a = new char [100]; 4 strcpy(a,"String A"); 5 cout<<"a: "<<a<<endl; 6 *(char **)&a = str; 7 cout<<"a: "<<a<<endl; 8 9 char c[100]="String B";10 char * b = c; 11 cout... 阅读全文
posted @ 2012-11-21 16:36 yaozhaoyz 阅读(122) 评论(0) 推荐(0) 编辑
摘要: //http://blog.csdn.net/atupal/article/details/8096753一、基本概念1.1什么是库在windows平台和linux平台下都大量存在着库。本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。由于windows和linux的平台不同(主要是编译器、汇编器和连接器的不同),因此二者库的二进制是不兼容的。本文仅限于介绍linux下的库。1.2库的种类linux下的库有两种:静态库和共享库(动态库)。二者的不同点在于代码被载入的时刻不同。静态库的代码在编译过程中已经被载入可执行程序,因此体积较大。共享库的代码是在可执行程序运行时才载入内 阅读全文
posted @ 2012-11-07 11:08 yaozhaoyz 阅读(254) 评论(0) 推荐(0) 编辑
摘要: 在下列情况下,声明仅仅是声明:1:仅仅提供函数原型。如void func(int,int);2: extern int a; // 没有初始化,extern int a=0;3:class A;4:typedef声明 typedef int MyINT32;5:在类中定义的静态数据成员的声明 class A {static int a;};除此之外, 变量或函数, 既是定义也是声明。// declare.cppint a=5;char b='a'+5;// fchar s[]="hello";char t[]="world";// def 阅读全文
posted @ 2012-11-05 20:59 yaozhaoyz 阅读(262) 评论(0) 推荐(0) 编辑
摘要: C++语言在编译的时候为了解决函数的多态问题,会将函数名和参数联合起来生成一个中间的函数名称,C语言则不会,直接将会将函数名作为中间函数名称。因此C++程序调用C方式编译的函数时, 可能会在链接时找不到对应的函数。例子:// extern.h1 int sum(int a,int b);//extern1.c1 int sum(int a,int b)2 {3 return a+b;4 }//extern2.cpp#include <iostream>using namespace std;extern int sum(int a,int b);int main(){ ... 阅读全文
posted @ 2012-11-05 20:59 yaozhaoyz 阅读(143) 评论(0) 推荐(0) 编辑
摘要: bool IsChineseGBKChr(const char * szTerm){ if ((szTerm == NULL) || (strlen(szTerm) != 2)) return false; unsigned char Chr[2]; Chr[0] = (unsigned char)szTerm[0]; Chr[1] = (unsigned char)szTerm[1]; return (((Chr[0] >= 0xB0) && (Chr[1] >= 0xA1) && (Chr[0] <= 0xF7) && (C 阅读全文
posted @ 2012-10-17 17:20 yaozhaoyz 阅读(260) 评论(0) 推荐(0) 编辑
摘要: P5: 除非你有一个足够好的理由允许构造函数被隐式调用,否则应该把它声明为explicit.Why: 确定行为 好于 不确定的行为.P17: 尽量不用#define. 用const代替宏定义的变量;用inline函数替代宏定义的函数。Why: 1.宏定义的变量难以debug;2.宏定义的函数……P18: 尽量使用const,1. const int func();这样的返回类型也定义为const型防止:func() = 1 这样的。2. 当const函数想修改成员变量时,可以定义mutalbe类型的成员变量;3. 当const返回类型的函数,想被修改时,可以定义了一个等价的non_const. 阅读全文
posted @ 2012-09-19 21:03 yaozhaoyz 阅读(108) 评论(0) 推荐(0) 编辑
摘要: 四、reinterpret_cast(参考文献2中的作者总结了一下三个用法:)1. 任意指针(或引用)类型之间的转换;2. 以及指针与足够大的整数类型之间的转换;3. 从整数类型(包括枚举类型)到指针类型,无视大小。reinterpret_cast 虽然很强大,但是使用时要特别小心。这个操作符一般用在内存池管理中。下面给个例子: 1 struct node 2 { 3 int na; 4 char nb; 5 char * nc; 6 node * pNextNode; 7 explicit node() 8 { 9 na... 阅读全文
posted @ 2012-09-17 21:06 yaozhaoyz 阅读(182) 评论(0) 推荐(0) 编辑
摘要: 三、static_caststatic_cast的用途有3个:1. 基本数据类型之间的相互转化;2. 派生类指针或引用 和 基类指针或引用的相互转化。(dynamic_cast在把基类指针转化成派生类指针时,会编译错误;而static_cast不会提示编译错误,但是这种转化是不安全的。)3. 各种指针类型 转换成 void *类型. (如果使用static_cast把void*类型转化为其它指针类型,编译器不会报错,但是转化行为不安全。) 1 class CBase {public: int bb;}; 2 class CDerived: public CBase {public:int dd 阅读全文
posted @ 2012-09-17 20:48 yaozhaoyz 阅读(163) 评论(0) 推荐(0) 编辑