摘要:Valgrind是一个GPL的软件,用于Linux(For x86, amd64 and ppc32)程序的内存调试和代码剖析。你可以在它的环境中运行你的程序来监视内存的使用情况,比如C 语言中的malloc和free或者 C++中的new和 delete。使用Valgrind的工具包,你可以自动的检测许多内存管理和线程的bug,避免花费太多的时间在bug寻找上,使得你的程序更加稳固。Valgrind的主要功能Valgrind工具包包含多个工具,如Memcheck,Cachegrind,Helgrind, Callgrind,Massif。下面分别介绍个工具的作用:Memcheck 工具主要检
阅读全文
摘要:#ifdef AIXINT32 CProcessState::GetProcessState(const INT64 lPid, TProState* pProcessState){ INT32 nRet = ZX_SYS_NO_ERROR; char cState = CHAR_SNONE; pid_t pid = lPid; INT32 nState = 0; INT64 lPageSize = 0; struct procsinfo pi; if (pProcessState == NULL) { ZX_ERROR(LOG_N...
阅读全文
摘要:就当作个笔记 ,以后慢慢补充。ps avx | head -1; ps avx | grep 307496 PID TTY STAT TIME PGIN SIZE RSS LIM TSIZ TRS %CPU %MEM COMMAND307496 - A 2478:25 309661 47360 21900 32768 3632 2332 0.1 1.0 PatrolAgentSIZE:进程数据段大小(可能在内存中,也可能在换页空间中,不包括代码段)RSS :进程实际占用实际内存大小(包括代码段)TRS:代码段占用实际 内存大小 进程占用的换页空间可以大致这样算:SIZE-(RSS-TRS)按我
阅读全文
摘要:Using C++ templatesIn C++, you can use a template to declare a set of related:Classes (including structures)FunctionsStatic data members of template classesWithin an application, you can instantiate the same template multiple times with the same arguments or with different arguments. If you use the
阅读全文
摘要:性能分析工具gprof介绍Ver:1.0目录1. GPROF介绍 42. 使用步骤 43. 使用举例 43.1 测试环境 43.2 测试代码 43.3 数据分析 53.3.1 flat profile模式 63.3.2 call graph模式 74. 链接库中的函数 75. 使用局限 86. 分析示例 12%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%1. gprof介绍gprof是GNU profile工具,可以运行于linux、AIX、Sun等操作系统进行C、C++、Pascal、Fortran程序的性能分析,用于程序的性能优化以及程序瓶颈问题的查找和解
阅读全文
摘要:前几天,遇到一个在hpux机器上,一个程序链接时既使用了动态库,又使用了静态库,而且把静态库放在动态库的前面。链接时报找不到符号的错误。而该符号已经在静态库中定义了。 今天恰好在 《C专家编程》中找到答案,如下: 在动态链接和镜头链接的语义上有一个巨大差别,archive(静态库)与共享对象(动态库)的动作不同。在动态链接中,所有的库符号进入输出文件的虚拟地址空间中,所有的符号对于链接在一起的所有文件都是可见的。相反,对于静态链接,在处理archive时,它只是在archive中查找载入器当时所知道的未定义符号。因此,使用静态链接的过程中,引入静态链接库的顺序是很重要的。如果相同的符号在...
阅读全文
摘要:1、查看test.cpp包含了哪些头文件 1.1 AIX xlC -M test.cpp编译选项。编译完后后生成一个.u文件。 2.2 HP-UX aCC -H test.cpp 2.3 Linux g++ -M test.cpp2、对test. cpp进行宏替换 cpp(The C Preprocessor)是unix编译器用来进行宏替换的工具。在编译的时候 ,有时遇到因宏替换而出现的问题,可以调用cpp 输出宏替换后的结果,这样就容易查问题了。 1.1 AIX cpp test.cpp xlC -E -c test.cpp 1.2 HP-UX hpux的cpp工具在/lib...
阅读全文
摘要:#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
阅读全文
摘要:gdb跟踪进程时,可以用 info frame查看当前栈桢信息,可以用 frame 、up、down 改变当前栈桢(gdb) info frameStack level 0, frame at 0x9fffffffbf6af1c0: ==>当前栈地址ip = 0xc0000000003db5f0:0 in __doprnt_main; saved ip 0xc0000000003d5990:0 ==》代码段地址called by frame at 0x9fffffffbf6af1c0 ==》调用它的栈地址Size of frame is 96, Size of locals is 88,
阅读全文
摘要:include <sys/select.h>#include <sys/itimer.h>int getitimer(int which, struct itimerval *value);int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue);结构itimerval描述了定时器的组成:struct itimerval{ struct tim. it_interval; /* 下次定时取值 */ struct tim. it_value; /* 本次定时设置值 *
阅读全文
摘要:ANSI/3.64控制码标准:ANSI控制码均以 Esc[ 作为控制码的开始标志,其中,Esc 的ansi码为 27-十进制,33-八进制,所以在c中,可以使用 \033 表示。具体如下:\33[0m 关闭所有属性\33[1m 设置高亮度\33[4m 下划线\33[5m 闪烁\33[7m 反显\33[8m 消隐\33[30m -- \33[37m 设置前景色\33[40m -- \33[47m 设置背景色\33[nA 光标上移n行\33[nB 光标下移n行\33[nC 光标右移n行\33[nD 光标左移n行\33[y;xH设置光标位置(现已很少使用) \33[2J 清...
阅读全文
摘要: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...
阅读全文
摘要:在UNIX的多线程下用到errno的时候,要留意下了,否则无法得到正确的errno。在AIX下,编译的时候需要加入-D_THREAD_SAFE在solaris下,编译的时候需要加入 -D_REENTRANT在hp-ux下,编译的时候 需要加入 -D_REENTRANT在linux下,不存在任何问题,可以放心大胆的使用通过这个问题,还学到一招,查看include头文件,我想在某些时候会起到些作用。比如,查看AIX下的/usr/include/errno.h文件,会发现这样的声明:#if defined(_THREAD_SAFE) || defined(_THREAD_SAFE_ERRNO)/**
阅读全文
摘要: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++
阅读全文
摘要:模板必须在使用它的时候才实例化,因此模板不能单独编译。如果把模板声明放在.h文件,把模板函数的定义放在.cpp里。在使用到模板的地方,由于只include了头文件,当然就找不到函数定义的代码。因此,简单的办法就是把模板函数的定义和声明都放在.h头文件里。 但是这就出现了一个问题。a.cpp使用了模板,因此就定义了一个该模板类型的实例。如果b.cpp也使用了与a.cpp相同的模板实例,则编译器又在b.o定义了一个相同的模板实例。这样在最终的可执行程式或库中有重复的模板实例。 为了解决这个问题,可以在编译和链接的时候 加上 -qtempinc选项。编译期在遇到这个选项时,会将模板的实例化代...
阅读全文
摘要:【内存使用率】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;}
阅读全文
摘要:voidprint(char(*arr)[10],intlen){inti;for(i=0;i<len;i++){printf("%s",arr[i]);}printf("\n");}intmain(){chararr[][10]={"bac","bca","abc","acb","cba","cab"};char*key="bca";char*ptr=NULL;printf("beforeqsort
阅读全文
摘要:intIBC_InfoIndb::read_file_from_dir(constchar*path,charfilename[][256],intmax_size,int*file_cnt){DIR*dir=NULL;structdirent*entry;cout<<"readdir:"<<path<<endl;dir=opendir(path);if(!dir){fprintf(stderr,"opendir%sfail!\n",path);return-1;}*file_cnt=0;readdir(dir);re
阅读全文
摘要:#include"apue.h"staticvolatilesig_atomic_tsigflag;/*setnonzerobysighandler*/staticsigset_tnewmask,oldmask,zeromask;staticvoidsig_usr(intsigno)/*onesignalhandlerforSIGUSR1andSIGUSR2*/{sigflag=1;}voidTELL_WAIT(void){if(signal(SIGUSR1,sig_usr)==SIG_ERR)err_sys("signal(SIGUSR1)error"
阅读全文