摘要:
一、前言在用C语言开发产品时,由于C语言中的指针操作的灵活性,因此在使用指针时也需要特别小心,稍微不严谨就会导致内存问题,如内存未初始化,内存泄露,内存重复释放等。但是在实际开发中,使用指针是不可避免的,那么出现内存问题也是不可避免的,因为不可能每个人都会仔细的敲代码并审查代码;那么如果出现这些问题时,有什么弥补手段了?这时候在项目开发中,使用内存检测模块就非常有必要了。二、基本原理要使用一块新内存,要么从栈上分配,要么从堆上分配,如果是从堆上分配,那么就记录申请好的内存起始地址,分配的大小,文件名和行号(哪个文件的哪一行调用了分配函数),如果是释放堆上的内存,同样记录释放的地址,文件名和行号 阅读全文
摘要:
今天晚上打算在windows平台上编译安装ACE,特记录此过程,希望与大家共勉.一、准备工作windows系统:windows xp IDE:Visual Studio Team System 2008(即Version 9版本) ACE:下载链接http://download.dre.vanderbilt.edu/,选择Latest Micro Release Kit项下的ACE.zip即可;我下载的版本为6.0.2;页面如下图所示:二、解压使用解压已下载的压缩包;我把它直接解压到C盘下,即最后的主目录结构为:C:\ACE_wrappers;双击C:\ACE_wrappers目录下的ACE- 阅读全文
摘要:
1、标准定义两种I/O多路复用模式:Reactor和Proactor一般地,I/O多路复用机制都依赖于一个事件多路分离器(Event Demultiplexer)。分离器对象可将来自事件源的I/O事件分离出来,并分发到对应的read/write事件处理器(Event Handler)。开发人员预先注册需要处理的事件及其事件处理器(或回调函数);事件分离器负责将请求事件传递给事件处理器。两个与事件分离器有关的模式是Reactor和Proactor。Reactor模式采用同步IO,而Proactor采用异步IO。在Reactor中,事件分离器负责等待文件描述符或socket为读写操作准备就绪,然后 阅读全文
摘要:
关于socket的阻塞与非阻塞模式以及它们之间的优缺点,这已经没什么可言的;我打个很简单的比方,如果你调用socket send函数时;如果是阻塞模式下:send先比较待发送数据的长度len和套接字s的发送缓冲的长度,如果len大于s的发送缓冲区的长度,该函数返回SOCKET_ERROR;如果len小于或者等于s的发送缓冲区的长度,那么send先检查协议是否正在发送s的发送缓冲中的数据,如果是就等待协议把数据发送完,如果协议还没有开始发送s的发送缓冲中的数据或者s的发送缓冲中没有数据,那么 send就比较s的发送缓冲区的剩余空间和len,如果len大于剩余空间大小,send就一直等待协议把s的 阅读全文
摘要:
这段时间在做一个CS模式的项目,服务端运行在linux/windows平台下,使用C语言;客户端运行在windows下,使用MFC开发;开发工具为VC++6.0企业版。。在开发服务端时,由于是使用C语言,所以经常使用malloc,free等C语言函数;在开发起初阶段,由于只是开发基础模块和基本的功能组件,所以不牵涉到多线程的开发。在开发过程中,团队的每个成员都就自己的模块编写测试用例,测试用例主要是让模块的功能流程跑一遍并确保正常。前期基本框架搭好之后,后面主要就功能业务进行开发,其中肯定要使用到多线程技术。。。在每个线程中肯定会调用malloc 和free等函数;开发一个模块之后,如果可以联 阅读全文
摘要:
一台机器上可能有多个网卡,每一个网卡只有一个MAC地址,但是每一个网卡可能配置有多个IP地址;如平常的笔记本电脑中,就会有无线网卡和有线网卡(网线接口)两种;因此,如果要获得本机所有网卡的IP和MAC地址信息,则必须顺序获得每个网卡,再依次获取其信息等;在windows sdk中,用IP_ADAPTER_INFO结构体存储网卡信息,包括网卡名、网卡描述、网卡MAC地址、网卡IP等,该结构体的主要描... 阅读全文
摘要:
vector概述stl vector是序列容器模板类,其支持指定类型的数据存储和随机访问;对于vector而言,如果在其尾部插入或删除项,其时间复杂度为常量;如果在中间或者头部插入或者删除项,则其时间复杂度为线性的,因为为了保持原本的相对次序,在插入或者删除项之后的所有项都必须进行移动;简单的说:vector类似于动态数组的概念,该动态数据能容纳任何类型的对象,并且可以按需动态伸缩空间;个人认为其... 阅读全文
摘要:
术语:动态链接库静态链接库动态链接静态链接其中动态链接库和静态链接库表示库本身文件,而动态链接和静态链接表示程序对库本身文件的链接方式;模块化编程经历了“无库->静态库->动态库”的阶段动态链接库和静态链接库都是一种代码仓库,为外界提供变量、函数或类,所以在一个程序中,不同的模块部分可以用库文件的形式来实现,从而只提供给外界相应的接口即可。动态链接库的文件命名后... 阅读全文