自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 收藏
  • 关注

原创 dynamic_cast使用方式

                c++提供了四种新的cast机制,分别为static_cast, const_cast, dynamic_cast和reinterpret_cast。虽然也支持c中使用一对圆括号来cast,但是由于c++与c最大的区别是c++增加了类的概念,因此在子类与父类之间进行cast的时候,使用c的cast方式是无法保证其正确性的,因此c++提供了新的cast机制(虽然比

2006-12-07 13:42:00 6322 1

原创 gdb中namespace的问题

  gdb中namespace的问题     由于namespace能防止命名冲突,因此在许多工程中会使用namespace。但是gdb调试的时候如果需要强制将void*指针转化成namespace中的某个struct或者class时,会出现一些问题。下面通过举例介绍解决的方法。     测试代码如下所示,总共两个文件,在test.h中使用了namespace,并在其中

2006-11-23 18:48:00 2685

原创 英文大小写引起的性能问题

英文大小写引起的性能问题    最近在做的一个项目中要实现字母大小写无关比较,很自然的使用标准c库中的函数tolower(),但是由于使用次数很多,对输入的字符数组每个都要使用一次,经过性能测试,发现使用tolower函数的性能只有不使用该函数的的三分之一。    察看了一下tolower函数的源码,发现其对MT有加锁互斥操作,而做的项目正后生成的是MT库,因此性能上会有问题。因此参考tolo

2006-09-16 13:27:00 2996 1

原创 wav文件格式分析详解

                           wav文件格式分析详解                                                                                         一、综述    WAVE文件作为多媒体中使用的声波文件格式之一,它是以RIFF格式为标准的。RIFF是英文Resource Interch

2006-07-17 15:51:00 68954 2

原创 atoi函数不同平台的实现问题

atoi函数不同平台的实现问题    工程中要通过文件得到数值,想当然的就使用了atoi这个函数。在Windows下使用,没什么问题。但是一移植到Linux下,问题就出来了,发现得到的数总是不对劲。用gdb跟踪一下,发现大于2147483647的数均返回2147483647这个值。又在Windows下debug了一下,发现得到的数值正常,能够得到大于2147483647的数。    这就比较有

2006-06-04 18:08:00 4654

原创 Windows多线程技术研究(四):跨平台线程API

                                      Windows多线程技术研究(四):跨平台线程API        线程是跟操作系统有关系的,所以Windows和Linux下线程的API有些差别,为了实现线程跨平台,于是整理了下面两个文件,Thread.h和Thread.cpp。用来实现跨平台线程API。        TestMain.cpp文件是测试跨平

2006-03-23 21:02:00 2858

原创 Windows多线程技术研究(三):线程API

Windows多线程技术研究(三):线程API        介绍完线程的基本概念后,接下来描述在windows下如何创建线程,以及相应的使用多线程一些基本API。        使用CreateThread()函数来创建一个线程。其函数原型为:   HANDLE CreateThread (                       LPSECURITY_ATTRIBUTES 

2006-03-23 20:41:00 4651

原创 Windows多线程技术研究(二):多线程基本概念

Windows多线程技术研究(二):多线程基本概念 “ Threads绝对可以缩短程序的执行时间吗? ” “应该尽量多产生threads来帮助程序工作吗?” “任何种类的程序都可以获得Multi-Thread的好处吗?” 似是而非的观念会将你的程序带往更坏的境界。                     -----《Win32多线程程序设计》  在你想用线程时,你必须清

2006-01-16 12:28:00 2980

原创 Windows多线程技术研究(一):引子

Windows多线程技术研究 (一)引子        自己目前使用的机器CPU是PIV2.4G的,而且居然带了HT(Hyper Thread)。用资源管理器看了一下CPU性能,有两个CPU使用记录窗口。每次跑程序时,发现 CPU使用率只能达到50%。猜想程序是单进程的,所以被映射到一个虚拟CPU上了,因此CPU使用率才显示为50%。 很自然的就想到,如果使用多进程技术(Mul

2005-12-20 09:50:00 2046

原创 链接静态库的问题

链接静态库的问题    最近在整理前人写的模块代码,将几个不同功能的模块统一成一个接口,提供给别人使用。为了内部修改方便以及外面使用方便,在Wondows平台下,很自然的就想到将内部每个不同的功能模块编译成独立的若干静态库文件(lib),然后再将这几个静态库文件整合成一个动态库文件(dll)。    这样内部各个模块可以让不同的人来维护,修改后的模块在单独编译,最后再重新生成dll文件,外面使用者

2005-12-10 19:48:00 3673 1

原创 VI命令简介

VI命令简介vi共分为三种方式:command,insert,escape。commmand方式:进入VI后默认为command方式,输入":"或"/"或"?"进入escape方式,输入"i"或"a"       进入insert方式。可以使用下面不以":"或"/"或"?"开头的命令。insert方式:编辑模式,跟windows下编辑文本使用相同。按"ESC"键返回command方式。在窗口esc

2005-11-24 16:36:00 1953

原创 VC.net环境下轻松实现DLL编程

    在我们实际用软件时,经常可看到许多动态连接库。动态连接库有其自身的优点如节省内存、支持多语种等功能,而且,当DLL中的函数改变后,只要不是参数的改变调用起的函数并不需要重新编译。这在编程时十分有用。  而DLL在VC中有三种形式:  1、Non-MFC Dlls  2、Regular Dlls  3、Extension DllsNon-MFC DLL:指的是不用MFC的类库结构,直接用C语

2005-11-21 13:15:00 3926

原创 安全关机程序

安全关机程序最近在实验室用ftp下点东西,但是由于实验室晚上12点就会断电。于是需要在此之前关掉机器,图省事就用WindowsXP自带的计划任务每次设置成11:50就调用“shutdown -s”命令自动关机。但是好几次都发现没法正常关机,第二天早上起来就会检测磁盘。于是就做了个实验,发现确实当使用flashfxp下载东西时,关机会不能正常关机,等待确定终止flashfxp程序。发现原因后,很简单

2005-11-07 21:16:00 2106

原创 VMWare虚拟系统的网络工作模式

VMWare虚拟系统的网络工作模式    由于实验需求,今天在window下安装了VMWare,用它来虚拟了一个RedHat 9.0的系统。安装后出现了两个虚拟网络连接(VMNet1和VMNet8),以前也用过VMWare,对其网络工作模式一直没弄清楚。今天正好有时间,就边参考网络上的文章,边作了一些试验。总算明白了VMWare的网络工作模式。下面介绍之。1、bridged(桥接模式)    通过

2005-10-18 16:16:00 2693

原创 WinCVS + CVSNT构建介绍

WinCVS + CVSNT构建介绍    下载地址:http://cvsgui.sourceforge.net/    下载完成后,压缩包中有两个安装程序,选择wincvs_setup.exe,它在安装完wincvs后安装cvsnt。版本为wincvs2.0.2.4。    1、增加Repositories打开Service control panel,选择Repositories(图1),点击

2005-10-11 10:57:00 2488

原创 使用profile来得到程序运行信息

使用profile来得到程序运行信息    profile程序可以用来监测程序不同部分(主要是各个函数)的使用时间和调用次数。因此可以使用这个程序来鉴别程序中那个函数是整个程序的瓶颈,从而可以通过优化这个函数来提高程序的性能。    Unix/Linux系统提供了GPROF这个profile程序。该程序提供两种信息:    1、程序中每个函数的CPU使用时间。    2、每个函数的调用次数。并提供

2005-10-09 11:21:00 1557

原创 程序优化

程序优化    函数lower1和lower2都是将一个字符串转换成小写格式。但是两者的效率却相差很大。用下面提供的test函数测试,几乎接近于一倍的关系。在我机子上测试结果是lower1:1125,lower2:656[注2]。    但是很显然,在具体编程中,第一种形式的程序肯定会有不少,原因是简单。而且想当然的认为两者应该差不多。笔者以前也是会选择第一种类型。在看了Computer syst

2005-09-29 13:51:00 1619

原创 一道微软推理题

一道微软推理题问题:    小明和小强都是张老师的学生,张老师的生日是M月N日,2人都知道张老师的生日是下列10组中的一天,张老师把M值告诉了小明,把N值告诉了小强, 张老师问他们知道他的生日是那一天吗? 3月4日 3月5日 3月8日     6月4日 6月7日  9月1日 9月5日  12月1日 12月2日 12月8日     小明说:如果我不知道的话,小强肯定也不知道     小强说:本来我也

2005-09-27 14:46:00 2397

原创 使用gdb调试程序简介

使用gdb调试程序简介一、初始化    输入gdb进入gdb调试环境。或者直接输入gdb + progfile来加载文件。注意该文件是使用gcc(或g++)编译得到的。为了使 gdb 正常工作, 必须使你的程序在编译时包含调试信息,编译时必须使用-g参数来。    或者进入gdb环境后,通过命令file + progfile来加载需要调试的可执行文件文件。    查看源代码:list [函数名][

2005-09-26 13:37:00 3169

原创 C编译过程

C编译过程当在命令行中输入下列编译指令时:gcc -O2 -o p.out p1.c p2.c其后台具体编译过程如下:1、首先分别将p1.c和p2.c文件中的包含的头文件和宏定义在文件中扩展开,形成.i文件;2、然后将p1.i和p2.i编译成汇编代码文件:p1.s和p2.s;3、接着将汇编代码文件在转化成二进制指令文件:p1.o和p2.o;4、最后连接过程,将两个.o文件和一些标准类库函数实现连接

2005-09-20 15:41:00 5161 2

原创 unsigned vs. signed in C/C++

unsigned vs. signed in C/C++    在使用C/C++编程时,无符号数据类型和有符号数据类型是肯定会混合使用的。如DWORD和int数据类型。一般在使用for循环时,或者if判断时,如果编程习惯不好或者稍微马虎时,就会出现问题。如下例:    DWORD i = 0;    int j = -1;    if (j          printf("all right!/

2005-09-19 10:58:00 1736

原创 递归遍历某一路径下的所有文件

递归遍历某一路径下的所有文件    在windows下,可以使用FindFirstFile和FindNextFile来实现。    而在Linux下,则可以使用opendir和readdir来实现。    具体实现见下面两个函数,分别实现了打印某一路径下的所有文件,包括子目录下的文件。在具体实现的时候需要注意设置路径。注:    下面两个程序都通过编译通过,且正常执行。    windows下使用

2005-09-13 20:42:00 2157

原创 一个有关fstream类的bug

一个有关fstream类的bug    近日写程序需要读出文件,对读出的内容作些修改,再写回到文件中。突然发现一个莫名其妙的问题,写回去的时候居然在文件末尾增加了几个字符。感到很不可思议。具体代码如下:  fstream infile;        infile.open("c://test.txt", ios::in);        infile.seekp(0, ios::end);   

2005-09-12 21:06:00 2512 4

原创 编程随记 ---- 拼包程序(四)

编程随记 ---- 拼包程序(四)      正当自我感觉很好的时候,老大让我测试一下主干网捕获下来的数据。一测之后,才发觉自己写的程序根本无法使用。捕获的数据少的可怜,甚至几乎为零。测试使我彻底冷静下来。原来拼包程序并不是如我想象中的那么简单。其复杂度来源于拼包程序的应用环境----主干网。    主干网的流量达到了G级别的量级。也就是说每秒钟至少有几G的流量。而其中30%的数据是有效数据,也就

2005-09-12 20:04:00 3263 2

原创 编程随记 ---- 拼包程序(三)

编程随记 ---- 拼包程序(三)    显然拼包程序主要考虑性能和正确性。显然正确性应该放在第一位,所以先保证程序的正确性,再在此基础上考虑怎样提高性能。    根据上面所描述的,基本上就能把拼包程序写出来了。为每个socket保留一个缓存区,显然每个连接应该有两个缓存区,一个方向一个。每次收到一个数据包:1、判断是否是现有保存的连接,是转2;否转32、状态为接收数据:察看其标志位,如果是SYN

2005-09-08 21:25:00 3039

原创 编程随记 ---- 拼包程序(二)

编程随记 ---- 拼包程序(二)    找来了Richard Stevens的经典著作《TCP/IP祥解 卷1:协议》仔细的翻阅TCP和IP协议部分。从而发现截获到的数据包前面包含若干头:wpcap Header + Ethernet Header + IP Header + TCP Header + Data前面已经分析了wpcap的头部。由于只需要分析TCP数据包,所以以太网包头部只需解析一

2005-09-04 19:40:00 3121

原创 编程随记 ---- 拼包程序(一)

编程随记 ---- 拼包程序(一)    六月中旬的某一天,老大的一封邮件把我招进了实验室,开始研究和项目为主的实验室生活。    刚进去,彼此互不熟悉。老大就让我编写一个拼包程序,以此来瞧瞧我的编程能力。给我讲了功能之后,还给了我一个工程框架。让我以此作为基础和环境来coding。    为了给我一些压力,老大还给了一个性能要求,每秒处理50MB数据包。而且不能用winpcap,只能自己分析包,

2005-08-19 15:02:00 2705

原创 编程心得 ---- 内存管理

编程心得 ---- 内存管理    在编写内存管理方面的程序时,遇到需要分配大块的内存空间,然后将该大内存空间分成若干等长的小内存块。程序中需要对这些小块进行读写和删除,其中每个小内存块可以分配给不同的使用者。那么如何快速找到没有分配的内存块以及收回不使用的内存块是性能瓶颈的关键所在。    很显然,简单的可以使用bool数组来标记每块小内存块的使用情况,但是在查找没有分配的内存块时只能通过for

2005-08-09 11:49:00 2134

原创 一道面试题及其解题思路

问题描述:    写出一个数学表达式,只能使用+,-,*,/这几个操作符,使之能够表示以下这个函数:F(L,M) = L    ( 当 M > L 时); F(L,M) = M   (当M 解题思路:    表达式可能表示形式应该是:A + B,其中当L > M时,其中一部分为0,当L 另外一部分就应该为0。    由于所能用到的操作符只能是:+,-,*,/,%,所以只能从这几个操作符的性质入手来

2005-07-21 14:18:00 1408

转载 明确区分堆与栈(zz)

  明确区分堆与栈    在bbs上,堆与栈的区分问题,似乎是一个永恒的话题,由此可见,初学者对此往往是混淆不清的,所以我决定拿他第一个开刀。    首先,我们举一个例子:    void f() { int* p=new int[5]; }    这条短短的一句话就包含了堆与栈,看到new,我们首先就应该想到,我们分配了一块堆内存,那么指针p呢?他分配的是一块栈内存,所以这句话的意思就是:在

2005-07-18 09:17:00 1229

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除