- 博客(31)
- 收藏
- 关注
转载 Linux下程序的Profile工具
我们在写程序,特别是嵌入式程序的时候,通常需要对程序的性能进行分析,以便程序能够更快更好地运行,达到实时(real-time)的目的。如果程序很大,分析起来就很困难。如果有个工具能够自动进行程序的性能分析,那就最好了。这里介绍一种Linux下程序的Profiling工具----GNU profiler。GNU gprof能够打印出程序运行中各个函数消耗的时间,可以帮助程序员找出众多函数中耗时最多的
2011-06-30 15:05:00 756
转载 bloom_filter算法的C++实现
C++语言: bloom_filter算法的C++实现#include #include #include unsigned int jshash(const char *s, unsigned size);unsigned int sdbmhash(const char *s, unsigned size);/* ------------- bloom types and funcs -
2011-06-30 14:31:00 305
原创 关于void* 用法以及调试
在进行类库设计时,因为 不确定类库的使用者具体使用什么类型的指针。 此时都用void*指针, 而C++的类型转转机制,可以把void*类型指针,转换成为 必须的指针类型。具体转换有编译器实现! 命令查看一个void *型的变量的时候,提示为: "attempt to dereference a generic a pointer " ,我该怎样才能查看这一类型的
2011-06-30 13:42:00 776
转载 BloomFilter简介
BloomFilter Bloom Filter是由Bloom在1970年提出的一种多哈希函数映射的快速查找算法。通常应用在一些需要快速判断某个元素是否属于集合,但是并不严格要求100%正确的场合。 一. 实例 为了说明Bloom Filter存在的重要意义,举一个实例: 假设要你写一个网络蜘蛛(web crawler)。由于网络间的链接错综复杂,蜘蛛在网络间爬行很可能
2011-06-30 12:29:00 327
转载 算法导论 Quicksort
Chapter 7: QuicksortQuicksort is a sorting algorithm whose worst-case running time is Θ(n2) on an input array of n numbers. In spite of this slow worst-case running time, quicksort is often the be
2011-06-30 09:27:00 475
转载 makefile中的patsubst
函数名称:加前缀函数—addprefix。函数功能:为“NAMES…”中的每一个文件名添加前缀“PREFIX”。参数“NAMES…”是空格分割的文件名序列,将“SUFFIX”添加到此序列的每一个文件名之前。返回值:以单空格分割的添加了前缀“PREFIX”的文件名序列。函数说明:示例: $(addprefix src/,foo bar) 返回值为“src/foo
2011-06-29 13:10:00 10078 2
转载 单链表快速排序
今天在学习《程序员使用算法》时,看到了单链表快排序这一节。初看时感觉程序有很大的问题,但是细细品味之后却发现程序设计的极为巧妙,同时又深感自己C语言指针知识之不牢固,特别是指针的指针方面的知识。单链表的快排序和数组的快排序基本思想相同,同样是基于划分,但是又有很大的不同:单链表不支持基于下标的访问。故书中把待排序的链表拆分为2个子链表。为了简单起见,选择链表的第一个节点作为基准,然后进行比
2011-06-29 10:48:00 478
转载 用非递归算法解决Hanoi汉诺塔问题
开天辟地的神勃拉玛(和中国的盘古差不多的神吧)在一个庙里留下了三根金刚石的棒,第一根上面套着64个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,庙里的众僧不倦地把它们一个个地从这根棒搬到另一根棒上,规定可利用中间的一根棒作为帮助,但每次只能搬一个,而且大的不能放在小的上面。计算结果非常恐怖(移动圆片的次数)18446744073709551615,众僧们即便是耗尽毕生精力也不可能完成金
2011-06-28 10:33:00 1685
转载 找出2n+1个数中不是成对出现的那个数
给出2n+1个数 其中有n个数是成对出现的 找出里面只出现了一次的那个数假设 这2n+1个数是int的,则借助两个临时变量可以实现目的 假设数据存放在int Data[2*N+1]里 int Find(int Data[],int N) { int i,int j; j=0; for(i=0;i return j; }原理,同一个数跟本身异或结果为0,而
2011-06-28 09:14:00 541
原创 Socket 传输结构体
typedef struct{char name[20];char age[10];} stu;发送方:..............................stu stu1;strcpy(stu1.name, "myname");strcpy(stu1.age, "30");send(sock, (char*)stu1,sizeo
2011-06-24 21:53:00 730
转载 智能指针的原理及实现方案
本文主要讨论C++程序设计的一种常用技术——智能指针(smart pointer),主要内容包括引用计数(reference count)和句柄类(handle class)。如果文中有错误或遗漏之处,敬请指出,谢谢! 作者: tyc611, 2007-02-01 当类中有指针成员时,一般有两种方式来管理指针成员:一是采用值型的方式管理,每个类对象都保留一份指针指向的对象的拷
2011-06-21 10:25:00 196
转载 智能指针
最近在做Windows上管理USB手机终端的相关程序。实际情况:Class Phone *symbian = new Phone();Class ConnectManager, Class CommManager都需要对symbian指针进行引用和维护(保留一个拷贝)。但是这样就导致了symbian何时可以被delete?在ConnectManager析构函数中delete?
2011-06-21 10:02:00 272
转载 带外数据OOB与紧急模式URG
A,TCP支持带外数据OOB吗?与紧急模式URG有什么关系? TCP支持带外数据,但是只有一个OOB字节,TCP的带外数据是通过紧急模式URG实现的.B,我们知道send(sendfd,"ABC",3,MSG_OOB),将发送3个字节的带外数据OOB数据.但是这里TCP又只支持一个字节的OOB,难道丢掉2个字节? TCP将把紧急模式URG 置位,紧急指针定位第三个字节("C")(这
2011-06-16 23:14:00 2453 1
转载 ulimit配置文件
先看一下ulimit配置文件的内容,下面只是截取了说明性的部分。view plaincopy to clipboardprint?01.# /etc/security/limits.conf 02.# 03.#Each line describes a limit for a user in the form: 04.# 05.# 06.# 07.
2011-06-16 16:17:00 1450
转载 关于SIGPIPE导致的程序退出
收集一些网上的资料,以便参考:http://blog.chinaunix.net/u2/69143/showart_1087349.html 当服务器close一个连接时,若client端接着发数据。根据TCP协议的规定,会收到一个RST响应,client再往这个服务器发送数据时,系统会发出一个SIGPIPE信号给进程,告诉进程这个连接已经断开了,不要再写了。 根据信号的默认处理规则
2011-06-16 13:58:00 261
转载 对EINTR的处理
调用系统调用的时候,有时系统调用会被中断.此时,系统调用会返回-1,并且错误码被置为EINTR.但是,有时并不将这样的情况作为错误.有两种处理方法:1.如果错误码为EINTR则重新调用系统调用,例如Postgresql中有一段代码: <a onclick="function onclick(){dp.sh.Toolbar.Command(ViewSource,thi
2011-06-16 09:34:00 2977 1
转载 Socket INADDR_ANY详解
INADDR_ANY就是指定地址为0.0.0.0的地址,这个地址事实上表示不确定地址,或“所有地址”、“任意地址”。 一般来说,在各个系统中均定义成为0值。例如在ubuntu的/usr/include/netinet/in.h定义为:/* Address to accept any incoming messages. */#define INADDR_ANY
2011-06-16 09:14:00 804
转载 GDB 调试多进程程序的几种方法
GDB 是 linux 系统上常用的调试工具,本文介绍了使用 GDB 调试多进程程序的几种方法,并对各种方法进行比较。GDB 是 linux 系统上常用的 c/c++ 调试工具,功能十分强大。对于较为复杂的系统,比如多进程系统,如何使用 GDB 调试呢?考虑下面这个三进程系统:进程 Proc2 是 Proc1 的子进程,Proc3 又是 Proc2 的子进程。如何使用
2011-06-15 22:57:00 296
转载 vim中ctags和cscope安装使用及错误
VIM外部插件介绍 一、 ctags : "######################################## 下载网址:http://ctags.sourceforge.net/ 软件功能:用于产生一个tags文件(代码索引文件), tags文件中记录的源文件的索引以帮助你快速得找到某个符号的定义。 它支持相当多的语言,如C、C++、C#、Shell等等。
2011-06-15 15:07:00 1063
转载 LINUX core dump 详解
1. 前言:有的程序可以通过编译, 但在运行时会出现Segment fault(段错误). 这通常都是指针错误引起的.但这不像编译错误一样会提示到文件->行, 而是没有任何信息, 使得我们的调试变得困难起来.2. gdb:有一种办法是, 我们用gdb的step, 一步一步寻找. 这放在短小的代码中是可行的, 但要让你step一个上万行的代码, 我想你会从此厌恶程序员这个名字, 而把他叫做调试员
2011-06-15 14:39:00 460
转载 C/C++语言中void及void指针的深层探索(转载)
1.概述许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误。本文将对void关键字的深刻含义进行解说,并详述void及void指针类型的使用方法与技巧。2.void的含义void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。void几乎只有“注释”和限制程序的作用,因为从来没有人会定义
2011-06-15 10:21:00 225
转载 指向指针的指针
一. 回顾指针概念: 今天我们又要学习一个叫做指向另一指针地址的指针。让我们先回顾一下指针的概念吧! 当我们程序如下申明变量: short int i; char a; short int * pi; 程序会在内存某地址空间上为各变量开辟空间,如下图所示。 内存地址→6 7 8 9 10 11 12 13 14 15 ------
2011-06-14 09:47:00 184
转载 make 常见错误
本章对make执行时可能出现常见错误进行汇总、分析,并给出修正的可能方法。 make执行过程中所产生错误并不都是致命的;特别是在命令行之前存在“-”、或者make使用“-k”选项执行时。make执行过程的致命错误都带有前缀字符串“***”。 错误信息都有前缀,一种是执行程序名作为错误前缀(通常是“make”);另外一种是当Makefile本身存在语法错误无法被make解析并执行时,前缀包含了mak
2011-06-13 15:38:00 382
转载 netinet/in.h - Internet Protocol family
NAMEnetinet/in.h - Internet Protocol family SYNOPSIS#include DESCRIPTIONWhen header file is included, the following types are defined through typedef. in_port_t An unsigned
2011-06-13 09:19:00 874
转载 #include 的作用
#include 基本系统数据类型是Unix/Linux系统的基本系统数据类型的头文件,含有size_t,time_t,pid_t等类型。 NAME sys/types.h - data typesSYNOPSIS #include DESCRIPTION The header shall include definitions for at
2011-06-13 09:11:00 505
转载 vim快速入门
vim有三种模式-普通(可视命令)模式,命令行模式,编辑模式。启动vim后在任何模式下按Esc键进入到普通模式。普通模式下输入:回车进入命令行模式,此时vim最窗口最下面一行为: 后面可以输入命令行命令.在执行任何命令前要确保在相应的模式下。1.启动与退出 1)vi filename (启动vim) 2)命令行模式下 :wq=> 保存并退出,:q!=>强行退出,
2011-06-12 21:29:00 802 2
转载 C++虚函数表解析
C++虚函数表解析(转)C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。关于
2011-06-12 12:27:00 287
转载 C++的namespace
#include stdio.h>namespace NameSpace1{ class MyClass { public: void f() { m = 1; printf("%d/n", m); } private:
2011-06-12 09:12:00 250
转载 va_list、va_start、va_arg、va_end的原理与使用
va_list、va_start、va_arg、va_end的原理与使用 1. 概述 由于在C语言中没有函数重载,解决不定数目函数参数问题变得比较麻烦;即使采用C++,如果参数个数不能确定,也很难采用函数重载.对这种情况,有些人采用指针参数来解决问题.下面就c语言中处理不定参数数目的问题进行讨论. 2. 定义 大家先看几宏. 在VC++6.0的i
2011-06-11 20:28:00 235
转载 Linux procfs详解
Linux procfs详解 1、 proc文件系统总览 在类Unix系统中体现了一种良好的抽象哲学,就是几乎所有的数据实体都被抽象成一个统一的接口--文件来看待,这样我们就可以用一些简单的基本工具完成大量复杂的操作。在Linux中存在着一类 特殊的伪文件系统,用于使用与文件接口统一的操作来完成各种功能,例如ptyfs、devfs、sysfs和procfs。而procfs就是其
2011-06-10 12:31:00 1430
转载 lsof简介
lsof简介 lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通
2011-06-10 11:00:00 211
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人