摘要:#include<stdlib.h>#include<stdio.h>#include<errno.h>#include<pthread.h>//externinterrnop;//externinterrno;extern_text;extern_etext;extern_data;extern_edata;//externchar*environ[];inti_initialized=1;/*initializedglobalvariable.*/longl_uninitialized;/*uninitializedglobalvariabl
        
阅读全文
 
    
        
        
摘要:template <typename T> struct Type2Type{ typedef T OriginalType;};【用途】比如说template <class T,class U>T* Create(const U& arg,T/*虚拟*/){	return new T(arg);};本模板函数用于使用U类型创建T类型。为了实例化时可以识别T,只能为函数增加一个T。但问题是,实例化的时候string* pstr=Create("hello world!",string());第2个参数需创建一个临时对象。但是这个临时对象却没有
        
阅读全文
 
    
        
        
摘要:Traits技术可以用来获得一个 类型 的相关信息的。 首先假如有以下一个泛型的迭代器类,其中类型参数 T 为迭代器所指向的类型:template <typename T>class myIterator{...};当我们使用myIterator时,怎样才能获知它所指向的元素的类型呢?我们可以为这个类加入一个内嵌类型,像这样:template <typename T>class myIterator{ typedef T value_type;...};这样当我们使用myIterator类型时,可以通过 myIterator::value_type来获得相应的myIte
        
阅读全文
 
    
        
        
摘要:一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放4、文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放5、程序
        
阅读全文
 
    
        
        
摘要:在unix中,相应的头文件为<stdarg.h>【函数参数在堆栈中的分步】 在进程中,堆栈地址是从高到低分配的.当执行一个函数的时候,将参数列表入栈,压入堆栈的高地址部分,然后入栈函数的返回地址,接着入栈函数的执行代码,这个入栈过程,堆栈地址不断递减,一些黑客就是在堆栈中修改函数返回地址,执行自己的代码来达到执行自己插入的代码段的目的. 总之,函数在堆栈中的分布情况是:地址从高到低,依次是:函数参数列表,函数返回地址,函数执行代码段. 堆栈中,各个函数的分布情况是倒序的.即最后一个参数在列表中地址最高部分,第一个参数在列表地址的最低部分.参数在堆栈中的分布情况如下: 最后...
        
阅读全文
 
    
        
        
摘要:指向类成员函数的指针并非指针参考<<C++必知必会>>的相关章节"指向类成员函数的指针",这个术语中包含了"类成员函数"的术语,但是严格的说,这里的成员函数只是指非静态成员函数,这个术语中还包含了"指针"这个术语,但是严格的说,它即不包含地址,行为也不象指针,说得干脆点,那就是"指向类成员函数的指针"并非指针.尽管这个术语有很大的迷惑性,但是就其含义来说,可以把一组同类型的函数抽象为一个"指向函数的指针",同样的道理,可以把一组类中同类型的类成员函数抽象为一个"
        
阅读全文
 
    
        
        
摘要:#ifndef__LIBNET_TYPES_H__#define__LIBNET_TYPES_H__#include<sys/types.h>#if!defined(__cplusplus)typedefunsignedcharbool;#definefalse0#definetrue(!0)#endif/*可以通过cpp来查看系统预定义宏,执行:touchfoo.h;cpp-dMfoo.h*/#ifdefined(_AIX)#elifdefined(__linux)#elifdefined(__hpux)#include<arpa/nameser_compat.h>t
        
阅读全文
 
    
        
        
摘要:关于C语言中的结构体对齐。 (1)什么是字节对齐 一个变量占用 n 个字节,则该变量的起始地址必须能够被 n 整除,即: 存放起始地址 % n = 0, 对于结构体而言,这个 n 取其成员种的数据类型占空间的值最大的那个。 (2)为什么要字节对齐 内存空间是按照字节来划分的,从理论上说对内存空间的访问可以从任何地址开始,但是在实际上不同架构的CPU为了提高访问内存的速度,就规定了对于某些类型的数据只能从特定的起始位置开始访问。这样就决定了各种数据类型只能按照相应的规则在内存空间中存放,而不能一个接一个的顺序排列。 举个例子,比如有些平台访问内存地址都从偶数地址开始,对于一个int型(...
        
阅读全文
 
    
        
        
摘要:Today I had a little chat with Michiel on #gnome-nl regarding the use of C++ classes in C code (he started learning C again ;-)).I was fascinated (well, sort of) by this, and tried to get something working. Here's the result:* First we need a C++ class, using one header file (Test.hh)class Test 
        
阅读全文
 
    
        
        
摘要:1) -AA 全面支持C++(HPUX PA上编译C++时的必须选项)2) -V 查看版本3) +DD64 编译64位程序4) +DAportable 跨版本编译5) -lpthread 支持POSIX线程6) -lrt 支持POSIX消息队列7) -D_REENTRANT 支持localtime_r,time_r,asctime_r (要想errno支持多线程安全,也需加这个)8) -D_INCLUDE__STDC_A1_SOURCE 支持Unicode(wprintf)9) -D_INCLUDE_LONGLONG 支持long long类型10) -D_RWSTD_MULTI...
        
阅读全文
 
    
        
        
摘要:popen在popen中调用下面的语句:df . | awk '{print $4}' | sed -n '2p'popen使用FIFO管道执行外部程序。#include <stdio.h>FILE *popen(const char *command, const char *type);int pclose(FILE *stream);popen 通过type是r还是w确定command的输入/输出方向,r和w是相对command的管道而言的。r表示command从管道中读入,w表示 command通过管道输出到它的stdout,popen返回F
        
阅读全文
 
    
        
        
摘要:介绍使用脚本判断内存泄漏的简便方法Document #: 2811995H29001Body:[标题]介绍使用脚本判断内存泄漏的简便方法内容提要:本文份四个部分介绍如何使用提供的脚本定位分析应用内存泄漏一,前言二,内存使用介绍三,脚本使用介绍四,示例分析五,总结说明:介绍使用脚本判断内存泄漏的简便方法一,前言应用内存泄漏是UNIX 系统中比较常见的一种现象,如何定位并确定内存泄漏的应用是一个相对复杂的过程。本文将探讨内存泄漏的产生,及在AIX 系统中如何利用提供的脚本,在系统级层面判断内存泄漏的进程。二,内存使用介绍C 语言中,应用使用malloc() 函数从进程的堆栈中申请内存,而在C++ 
        
阅读全文
 
    
        
        
摘要:【概述】 为什么需要hash_map用过map吧?map提供一个很常用的功能,那就是提供key-value的存储和查找功能。例如,我要记录一个人名和相应的存储,而且随时增加,要快速查找和修改:岳不群-华山派掌门人,人称君子剑张三丰-武当掌门人,太极拳创始人东方不败-第一高手,葵花宝典...这些信息如果保存下来并不复杂,但是找起来比较麻烦。例如我要找"张三丰"的信息,最傻的方法就是取得所有的记录,然后按照名字一个一个比较。如果要速度快,就需要把这些记录按照字母顺序排列,然后按照二分法查找。但是增加记录的时候同时需要保持记录有序,因此需要插入排序。考虑到效率,这就需要用到二叉树
        
阅读全文
 
    
        
        
摘要:关联式容器都有一个键值,键值要求必须支持<比较操作。Map或set或multimap或multiset在存储数据时,根据键值的<顺序顺序存储。对于set,因为在插入时需要比较键值是否相等,在此,它对于是否相等的确认方法是:如果 a<b为false 并且 b<a为false,则相等。但是,在定义关联式容器时,可以指定自己的比较函数,见如下map类定义:template<class _Kty,	class _Ty,	class _Pr = less<_Kty>,	class _Alloc = allocator<pair<const _Kty,
        
阅读全文
 
    
        
        
摘要:函数对象是重载了“()”操作符的普通类对象。因此从语法上讲,函数对象与普通的函数行为类似。用函数对象代替函数指针有几个优点:1)首先,因为对象可以在内部修改而不用改动外部接口,因此设计更灵活,更富有弹性。函数对象也具备有存储先前调用结果的数据成员。在使用普通函数时需要将先前调用的结果存储在全程或者本地静态变量中,但是全程或者本地静态变量有某些我们不愿意看到的缺陷。2)其次,在函数对象中编译器能实现内联调用,从而更进一步增强了性能。这在函数指针中几乎是不可能实现的。3)函数对象属于类对象,可以把函数设计为模板函数。如#define LENGTH(s) (sizeof(s)/sizeof(s[0]
        
阅读全文
 
    
        
        
摘要:模板必须在使用它的时候才实例化,因此模板不能单独编译。如果把模板声明放在.h文件,把模板函数的定义放在.cpp里。在使用到模板的地方,由于只include了头文件,当然就找不到函数定义的代码。因此,简单的办法就是把模板函数的定义和声明都放在.h头文件里。 但是这就出现了一个问题。a.cpp使用了模板,因此就定义了一个该模板类型的实例。如果b.cpp也使用了与a.cpp相同的模板实例,则编译器又在b.o定义了一个相同的模板实例。这样在最终的可执行程式或库中有重复的模板实例。 为了解决这个问题,可以在编译和链接的时候 加上 -qtempinc选项。编译期在遇到这个选项时,会将模板的实例化代...
        
阅读全文
 
    
        
        
摘要:STL有大量用来处理容器的算法。这些算法可以分为如下几类:排序和搜索、数值处理、集合运算、拷贝等。1、reversetemplate<class BidirectionalIterator>void reverse( BidrectionalIterator it1,BidrectionalIterator it2);需要注意的是,reverse的两个参数均为双向迭代器类型。2、generateeg. Generate(v.begin(),v.end(),rand);3、replace_ifbool odd(int i){return i%2!=0;}replace_if( v.b
        
阅读全文
 
    
        
        
摘要:非类型模板形参模板形参不必都是类型。Template<classT,size_tN>voidarray_init(T(&parm)[N]){For(size_ti=0;i!=N;i++){Parm[i]=0;}}例2:template<inthi,intwid>classScreen{public:Screen():screen(hi*wid,'#'),cursor(0),height(hi),width(wid){}voiddump(){std::cout<<screen;}private:std::stringscreen;std
        
阅读全文
 
    
        
        
摘要:【内存使用率】floatCHWMSchedule::GetMemUsedRate(){unsignedlonglongullFreePhyMem=0;unsignedlonglongullUsedPhyMem=0;unsignedlonglongullTotalPhyMem=0;perfstat_memory_total_tminfo;if(perfstat_memory_total(NULL,&minfo,sizeof(perfstat_memory_total_t),1)!=1){printf("GetSystemMemoryFail");return0.0;}
        
阅读全文
 
    
        
        
摘要:template<classForwardIterator,classT>ForwardIteratorremove(ForwardIteratorfirst,ForwardIteratorlast,constT&value);<algorithm>RemovevaluefromrangeRemovesfromtherange[first,last)theelementswithavalueequaltovalueandreturnsaniteratortothenewendoftherange,whichnowincludesonlythevaluesnote
        
阅读全文