2012年8月7日

摘要: 在无边浩渺的宇宙中,银河系只是一个普通的旋涡。它坐拥2000多亿颗恒星,如按1/5的恒星带有行星计算,我们可以想象有无数天寒地冻或者炽热的星球。如果它们从未产生过生命,大千世界的景象从未被映射入心灵,如果世界从未被自我意识所发现,被倒影在大脑皮层之上,那么宇宙的存在又有谁知道呢?从这个角度来讲生命才是宇宙的核心。大约38亿年前,在一颗蔚蓝色的星球上,有机大分子在原始海洋里聚集,生命从一次雷电交汇的偶然催化后形成,从此开始了进化飞跃。细胞不断增加,组织发生分工,脊索开始出现,鳃演化成了肺,鳍演变成四肢,冷血成为热血,大脑的容量越来越大,进化—进化—进化!生命从海洋出发,占领了陆地和天空,一往无前 阅读全文
posted @ 2012-08-07 21:16 山本二十八 阅读(323) 评论(0) 推荐(0) 编辑
摘要: #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 阅读全文
posted @ 2012-08-07 17:59 山本二十八 阅读(172) 评论(0) 推荐(0) 编辑
摘要: 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, 阅读全文
posted @ 2012-08-07 17:58 山本二十八 阅读(2528) 评论(0) 推荐(0) 编辑
摘要: 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; /* 本次定时设置值 * 阅读全文
posted @ 2012-08-07 17:57 山本二十八 阅读(193) 评论(0) 推荐(0) 编辑
摘要: 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 清... 阅读全文
posted @ 2012-08-07 17:56 山本二十八 阅读(3759) 评论(0) 推荐(0) 编辑
摘要: 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个参数需创建一个临时对象。但是这个临时对象却没有 阅读全文
posted @ 2012-08-07 17:55 山本二十八 阅读(311) 评论(0) 推荐(0) 编辑
摘要: Traits技术可以用来获得一个 类型 的相关信息的。 首先假如有以下一个泛型的迭代器类,其中类型参数 T 为迭代器所指向的类型:template <typename T>class myIterator{...};当我们使用myIterator时,怎样才能获知它所指向的元素的类型呢?我们可以为这个类加入一个内嵌类型,像这样:template <typename T>class myIterator{ typedef T value_type;...};这样当我们使用myIterator类型时,可以通过 myIterator::value_type来获得相应的myIte 阅读全文
posted @ 2012-08-07 17:55 山本二十八 阅读(205) 评论(0) 推荐(0) 编辑
摘要: 一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放4、文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放5、程序 阅读全文
posted @ 2012-08-07 17:54 山本二十八 阅读(171) 评论(0) 推荐(0) 编辑
摘要: 在unix中,相应的头文件为<stdarg.h>【函数参数在堆栈中的分步】 在进程中,堆栈地址是从高到低分配的.当执行一个函数的时候,将参数列表入栈,压入堆栈的高地址部分,然后入栈函数的返回地址,接着入栈函数的执行代码,这个入栈过程,堆栈地址不断递减,一些黑客就是在堆栈中修改函数返回地址,执行自己的代码来达到执行自己插入的代码段的目的. 总之,函数在堆栈中的分布情况是:地址从高到低,依次是:函数参数列表,函数返回地址,函数执行代码段. 堆栈中,各个函数的分布情况是倒序的.即最后一个参数在列表中地址最高部分,第一个参数在列表地址的最低部分.参数在堆栈中的分布情况如下: 最后... 阅读全文
posted @ 2012-08-07 17:53 山本二十八 阅读(242) 评论(0) 推荐(0) 编辑
摘要: 指向类成员函数的指针并非指针参考<<C++必知必会>>的相关章节"指向类成员函数的指针",这个术语中包含了"类成员函数"的术语,但是严格的说,这里的成员函数只是指非静态成员函数,这个术语中还包含了"指针"这个术语,但是严格的说,它即不包含地址,行为也不象指针,说得干脆点,那就是"指向类成员函数的指针"并非指针.尽管这个术语有很大的迷惑性,但是就其含义来说,可以把一组同类型的函数抽象为一个"指向函数的指针",同样的道理,可以把一组类中同类型的类成员函数抽象为一个" 阅读全文
posted @ 2012-08-07 17:53 山本二十八 阅读(3729) 评论(0) 推荐(0) 编辑
摘要: #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 阅读全文
posted @ 2012-08-07 17:52 山本二十八 阅读(266) 评论(0) 推荐(0) 编辑
摘要: 关于C语言中的结构体对齐。 (1)什么是字节对齐 一个变量占用 n 个字节,则该变量的起始地址必须能够被 n 整除,即: 存放起始地址 % n = 0, 对于结构体而言,这个 n 取其成员种的数据类型占空间的值最大的那个。 (2)为什么要字节对齐 内存空间是按照字节来划分的,从理论上说对内存空间的访问可以从任何地址开始,但是在实际上不同架构的CPU为了提高访问内存的速度,就规定了对于某些类型的数据只能从特定的起始位置开始访问。这样就决定了各种数据类型只能按照相应的规则在内存空间中存放,而不能一个接一个的顺序排列。 举个例子,比如有些平台访问内存地址都从偶数地址开始,对于一个int型(... 阅读全文
posted @ 2012-08-07 17:50 山本二十八 阅读(989) 评论(0) 推荐(0) 编辑
摘要: 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 阅读全文
posted @ 2012-08-07 17:49 山本二十八 阅读(354) 评论(0) 推荐(0) 编辑
摘要: 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... 阅读全文
posted @ 2012-08-07 17:48 山本二十八 阅读(2435) 评论(0) 推荐(0) 编辑
摘要: 在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)/** 阅读全文
posted @ 2012-08-07 17:47 山本二十八 阅读(243) 评论(0) 推荐(0) 编辑
摘要: 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 阅读全文
posted @ 2012-08-07 14:14 山本二十八 阅读(295) 评论(0) 推荐(0) 编辑
摘要: 介绍使用脚本判断内存泄漏的简便方法Document #: 2811995H29001Body:[标题]介绍使用脚本判断内存泄漏的简便方法内容提要:本文份四个部分介绍如何使用提供的脚本定位分析应用内存泄漏一,前言二,内存使用介绍三,脚本使用介绍四,示例分析五,总结说明:介绍使用脚本判断内存泄漏的简便方法一,前言应用内存泄漏是UNIX 系统中比较常见的一种现象,如何定位并确定内存泄漏的应用是一个相对复杂的过程。本文将探讨内存泄漏的产生,及在AIX 系统中如何利用提供的脚本,在系统级层面判断内存泄漏的进程。二,内存使用介绍C 语言中,应用使用malloc() 函数从进程的堆栈中申请内存,而在C++ 阅读全文
posted @ 2012-08-07 14:13 山本二十八 阅读(4243) 评论(0) 推荐(0) 编辑
摘要: 【概述】 为什么需要hash_map用过map吧?map提供一个很常用的功能,那就是提供key-value的存储和查找功能。例如,我要记录一个人名和相应的存储,而且随时增加,要快速查找和修改:岳不群-华山派掌门人,人称君子剑张三丰-武当掌门人,太极拳创始人东方不败-第一高手,葵花宝典...这些信息如果保存下来并不复杂,但是找起来比较麻烦。例如我要找"张三丰"的信息,最傻的方法就是取得所有的记录,然后按照名字一个一个比较。如果要速度快,就需要把这些记录按照字母顺序排列,然后按照二分法查找。但是增加记录的时候同时需要保持记录有序,因此需要插入排序。考虑到效率,这就需要用到二叉树 阅读全文
posted @ 2012-08-07 14:10 山本二十八 阅读(2215) 评论(0) 推荐(0) 编辑
摘要: 关联式容器都有一个键值,键值要求必须支持<比较操作。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, 阅读全文
posted @ 2012-08-07 14:06 山本二十八 阅读(277) 评论(0) 推荐(0) 编辑
摘要: 函数对象是重载了“()”操作符的普通类对象。因此从语法上讲,函数对象与普通的函数行为类似。用函数对象代替函数指针有几个优点:1)首先,因为对象可以在内部修改而不用改动外部接口,因此设计更灵活,更富有弹性。函数对象也具备有存储先前调用结果的数据成员。在使用普通函数时需要将先前调用的结果存储在全程或者本地静态变量中,但是全程或者本地静态变量有某些我们不愿意看到的缺陷。2)其次,在函数对象中编译器能实现内联调用,从而更进一步增强了性能。这在函数指针中几乎是不可能实现的。3)函数对象属于类对象,可以把函数设计为模板函数。如#define LENGTH(s) (sizeof(s)/sizeof(s[0] 阅读全文
posted @ 2012-08-07 14:05 山本二十八 阅读(375) 评论(0) 推荐(0) 编辑

导航