- 博客(712)
- 资源 (15)
- 收藏
- 关注
原创 c/c++字节对齐
在 相同的对齐方式下 ,结构体内部数据 定义的顺序不同 ,结构体整体占据内存空间也 不同 ,如下: 设结构体如下定义: struct A { int a; char b; short c; }; 结构体A中包含了4字节长度的int一个,1字节长度的char一个和2字节长度的short型数据一个。所以A用到的空间应该是7字
2012-09-07 11:30:52 1237 1
原创 C/C++ struct位结构(位域)
从问题开始#includevoid main(){union{struct{unsigned short s1:3;unsigned short s2:3;unsigned short s3:3;}x;char c;}v;v.c=100;printf("%d/n",v.x.s3);}A:4 B:0 C:3 D:6答案是
2012-09-07 10:24:21 1572
原创 c99之 柔性数组成员
在讲述柔性数组成员之前,首先要介绍一下不完整类型(incomplete type)。不完整类型是这样一种类型,它缺乏足够的信息例如长度去描述一个完整的对象。6.2.5 Typesincomplete types (types that describe objects but lack information needed to determine their sizes). C与
2012-09-07 10:13:14 959
原创 Windows共享内存 C++及C#实现
FileMapping用于将存在于磁盘的文件放进一个进程的虚拟地址空间,并在该进程的虚拟地址空间中产生一个区域用于“存放”该文件,这个空间就叫做File View,系统并同时产生一个File Mapping Object(存放于物理内存中)用于维持这种映射关系,这样当多个进程需要读写那个文件的数据时,它们的File View其实对应的都是同一个File Mapping Object,这样做
2012-09-07 08:47:06 5577
原创 (*)使用Boost.Asio编写通信程序
http://cpp.ezbty.org/content/science_doc/%E4%BD%BF%E7%94%A8boostasio%E7%BC%96%E5%86%99%E9%80%9A%E4%BF%A1%E7%A8%8B%E5%BA%8F使用Boost.Asio编写通信程序由 lgb 于 星期日, 2010/07/25 - 18:02 发表asioboost同步异步网
2012-09-06 16:22:41 1724
原创 一则简单的Windows共享内存IPC代码
Windows共享内存可以让两个进程对同一块内存进行读写。以下有2个进程,a.cpp生成A进程,b.cpp生成b进程。那么a进程将不停地读名为"Global\\MyFileMappingObject"的共享内存块,而b进程不停地写名为"Global\\MyFileMappingObject"的共享内存块。从而实现IPC。 //a.cpp#include #inclu
2012-09-06 14:03:29 909
原创 OO设计原则总结
什么是设计原则? 设计原则是基本的工具,应用这些规则可以使你的代码更加灵活、更容易维护,更容易扩展。基本原则 封装变化Encapsulate what varies. 面向接口编程而非实现 Code to an interface rather than to an implementation. 优先使用组合而非继承 Favor Composition Over In
2012-08-30 09:21:35 799
原创 单一职责原则
引言 一个优良的系统设计,强调模块间保持低耦合、高内聚的关系,在面向对象设计中这条规则同样适用,所以面向对象的第一个设计原则就是:单一职责原则(SRP,Single Responsibility Principle)。定义单一职责原则(Single Responsibility Principle, SRP):一个类,最好只做一件事,只有一个引起它变化的原因。理解理解S
2012-08-30 09:18:06 886
原创 win32API之InterlockedExchangeAdd
InterlockedExchangeAdd()函数是解决互斥的一个简单方法,与信号量,互斥作用相当。原型如下:[cpp] view plaincopyprint?LONG InterlockedExchangeAdd(PLONG Addend, LONG Value); LONG InterlockedExchangeAdd(PLONG Addend
2012-08-13 18:15:41 7285
原创 《Windows核心编程》---Interlocked原子访问系列函数 .
转自:http://blog.csdn.net/ace1985/article/details/5729912所谓原子访问,指的是一个线程在访问某个资源的同时能够保证没有其他线程会在同一时刻访问同一资源。Interlocked系列函数提供了这样的操作。所有这些函数会以原子方式来操控一个值。Interlocked函数的工作原理取决于代码运行的CPU平台,如果是x86系列CPU,那么Inter
2012-08-13 18:02:32 1514
原创 IOCP加Windows线程池打造高伸缩性高性能的服务器应用
对于IOCP,搞Windows服务器编程的都不会陌生,它所表现出来的性能是其他各种WinSock模型难望其项背的。撰写本文的目的就是为让大家能够在深入理解IOCP的基础上,再来深入的挖掘Windows系统的性能。此处假设读者对IOCP模型已经深刻理解,并对Windows线程、线程池有一定的了解。如果对此还不熟悉,限于篇幅的原因,请您先学习理解这些内容后再来阅读本文。 在IOCP模型
2012-08-13 10:10:54 6877 1
原创 IOCP之accept、AcceptEx、WSAAccept的区别 .
1. accept、WSAAccept是同步操作,AcceptEx是异步操作2. WSAAccept函数早accept函数基础上添加了条件函数判断是否接受客户端连接3. AcceptEx是异步的,可以同时发出多个AcceptEx请求,支持重叠IO操作.
2012-08-13 08:56:32 10278
原创 仿函数
http://blog.csdn.net/armman/archive/2007/03/18/1532645.aspx仿函数,又叫做函数对象,是一个重载了"()"运算符的struct,是STL(标准模板库)六大组件(容器、配置器、迭代器、算法、配接器、仿函数)之一;仿函数虽然小,但却极大的拓展了算法的功能,几乎所有的算法都有仿函数版本。例如,查找算法find_if就是对find算法的扩展,
2012-08-06 15:36:03 2442
原创 winform 启用控制台
/**//// /// 启动控制台 /// /// [DllImport("kernel32.dll")] public static extern bool AllocConsole(); /**//// /// 释放控制台 ///
2012-08-05 22:42:58 946
原创 服务器开发
作者:司强发布者:司强发布日期:2008/07/22 对于开发一款高性能服务器程序,广大服务器开发人员在一直为之奋斗和努力.其中一个影响服务器的重要瓶颈就是服务器的网络处理模块.如果一款服务器程序不能及时的处理用户的数据.则服务器的上层业务逻辑再高效也是徒劳.所以一个服务器程序的网络处理能力直接影响到整个服务器的性能, 本文主要介绍在windows平台下开发高性能的网络处理模
2012-08-05 22:42:12 1315
原创 集群式游戏服务器架构方案设计开发
自从2003年开发VOIP Radius Server以及修改Gnugk以来,从事服务器开发已经近五年了,对服务器开发也有一些自己独到的看法以及见解。当摆脱了技术本身的束缚之后,才理解重要的并不是某种技术的运用,而是整体设计的考虑,也慢慢明白了设计是开发的灵魂的道理。从技术层面来看,各个平台都有一些自己特有的东西,比如Windows 平台下面的IOCP技术,可以说为了支持大的并发,IOCP
2012-08-05 22:38:56 1333 1
原创 VC工程中MBCS定义的含义
VC工程中的缺省定义是MBCS,当然也可以定义为UNICODE。我们知道前者是“多字节编码”,后者是“UNICODE编码”,后者好理解,因为UNICODE就特指UTF-16,可是多字节编码有太多种了,比如UTF-8、GB2312、Big5等等,那么前者具体指的是哪一种编码呢?具体说来,如果我们声明一个CString str="abc移动";或者说我们使用GetWindowText从一个控件
2012-07-25 14:59:03 1831
原创 stdafx介绍
简介 名称的英文全称为:Standard Application Framework Extensions 所谓头文件预编译,就是把一个工程(Project)中使用的一些MFC标准头文件(如Windows.H、Afxwin.H)预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使用预编译的结果。这样可以加快编译速度,节省时间。 预编译头文件通过编译stdafx
2012-07-25 08:46:31 1221
原创 STL 整理(map、set、vector、list、stack、queue、deque、priority_queue)(转)
SDAU-ACM耀哥整理的,感觉很不错,弄过来慢慢看 原文链接:http://blog.csdn.net/lmyclever/article/details/6750041 向量(vector) 连续存储的元素Vectorc;c.back() 传回最后一个数据,不检查这个数据是否存在。c.clear() 移除容器中所有数据。c.empty()
2012-07-22 17:55:28 965
原创 百万用户级游戏服务器架构设计(2)
登录服的设计 -- 功能需求 正如我们在前面曾讨论过的,登录服要实现的功能相当简单,就是帐号验证。为了便于描述,我们暂不引入那些讨论过的优化手段,先以最简单的方式实现,另外也将基本以mangos的代码作为参考来进行描述。 想象一下帐号验证的实现方法,最容易的那就是把用户输入的明文用帐号和密码直接发给登录服,服务器根据帐号从数据库中取出密码,与用户输入的密码相比较。 这个方
2012-07-22 16:06:32 1869
原创 百万用户级游戏服务器架构设计(1)
服务器结构探讨 -- 最简单的结构 所谓服务器结构,也就是如何将服务器各部分合理地安排,以实现最初的功能需求。所以,结构本无所谓正确与错误;当然,优秀的结构更有助于系统的搭建,对系统的可扩展性及可维护性也有更大的帮助。 好的结构不是一蹴而就的,而且每个设计者心中的那把尺都不相同,所以这个优秀结构的定义也就没有定论。在这里,我们不打算对现有游戏结构做评价,而是试着从头开始搭建一个我
2012-07-22 16:05:15 2927
原创 boost::pool与内存池技术
建议看这个链接的内容:http://cpp.winxgui.com/cn:mempool-example-boost-pool Pool分配是一种分配内存方法,用于快速分配同样大小的内存块, 尤其是反复分配/释放同样大小的内存块的情况。1. pool 快速分配小块内存,如果pool无法提供小块内存给用户,返回0。 Example:
2012-07-22 15:55:59 1423
原创 内存池(MemPool)技术详解
概述内存池(MemPool)技术备受推崇。我用google搜索了下,没有找到比较详细的原理性的文章,故此补充一个。另外,补充了boost::pool组件与经典MemPool的差异。同时也描述了MemPool在sgi-stl/stlport中的运用。经典的内存池技术经典的内存池(MemPool)技术,是一种用于分配大量大小相同的小对象的技术。通过该技术可以极大加快内存分配/释放过程。下面
2012-07-22 15:44:29 1639
原创 SGI-STL学习笔记之allocator .
转自:http://blog.csdn.net/xinhanggebuguake/article/details/6225563空间配置器的标准接口:[c-sharp] view plaincopyprint?allocator::value_type allocator::pointer allocator::const_pointer al
2012-07-20 14:32:55 1188
原创 SGI STL空间配置器和内存池
最近在看侯捷老师的《STL源码剖析》,非常感叹其中空间配置器实现的巧妙和细致,对效率真正是锱铢必较。 一般我们所习惯的内存配置和释放是通过new和delete来完成的,而new运算包含了两个阶段:1.调用::operator new配置内存 2.调用构造函数 Foo() 构造对象。delete运算也包含两个阶段:1.调用析构函数 ~Foo() 将对象析构 2.调用::operator del
2012-07-20 14:00:12 1092 1
原创 SGI STL空间配置器(STL源码剖析)
空间配置器的标准接口(根据STL规范) allocator::value_typeallocator::pointerallocator::const_pointerallocator::referenceallocator::const_referenceallocator::size_typeallocator::difference_typealloc
2012-07-20 13:40:30 950
原创 SGI STL V3.2 源码剖析 - 空间配置器
1.1. 文件名bits/stl_alloc.h1.2. 背景知识候捷在《STL源代码剖析》中说:“源码之前,了无秘密”,自然是大师的潇洒之语。但是,如果你不熟悉C++ template的基本语法,不明白Generic Programming的基本概念,那么即便STL的源码当前,对你来讲仍会有很多秘密。所以,先简要介绍一些必要
2012-07-20 13:36:15 1235
原创 在 vs2008 里使用 SGI STL 的内存池特性
最近开发的一个C++项目是针对性能进行优化的,所以在很多细节上不得不"咬文嚼字", 而/C++其中强大的地方是对内存使用有很强的可控性, 而任何一个C++项目都离不开对内存的管理,所以要进行内存管理的优化内存池是必须要考虑的.内存池的做法理论在网上很容易找到,但却真正可靠高效的实现,还真是凤毛麟角,也许你会说ACE,boost之类的现成实现,然而这些大家伙动辄就得找半天资料才能编译通过,而
2012-07-20 11:25:53 2167 2
原创 SGI STL 内存池(转)
将SGI STL的内存池抠了出来,win32平台// mem_pool.h#ifndef mem_pool_h#define mem_pool_h#pragma once#define ALIGN 512#define MAX_BLOCK_SIZE 20 * 1024#define BLOCK_LIST_NUM MAX_BLOCK_SIZE
2012-07-20 11:20:15 1649
原创 SGI STL的内存池
stl中各种容器都有一个可选的模板参数:allocator,也就是一个负责内存分配的组件。STL标准规定的allcator被定义在memory文件中。STL标准规定的allocator只是单纯地封装operator new,效率上有点过意不去。SGI实现的STL里,所有的容器都使用SGI自己定义的allocator。这个allocator实现了一个small object的内存池。Loki
2012-07-20 11:18:03 1253
原创 NTSD(Command Line)调试DMP格式文件
前言:之前介绍了利用VS2005进行Dump文件的调试,功能非常强大。但VS2005是一个大程序,本文将讨论利用NTSD的Command Line 实现Dump 文件的调试。1、 载入DMP格式文件利用CMD打开命令行窗口,切换到NTSD所在目录。利用命令载入DMP文件:ntsd –z dumpfileName –y symbolPath –srcpath sourcecodePat
2012-07-18 11:44:36 970
原创 Windbg培训笔记之一(基础篇)
Windbg培训笔记一(基础篇)主讲人:Nick XiaoWindbg简介Windbg是微软 提供的应用程序,可以在微软的官方网站上下载到。Windbg 提供了用户态和核心态的调试能力。为什么要用WindbgVC6和VS2008都提供了Debug的功能,那为什么我们还需要用Windbg这个工具呢?简单来说,假如你的程序在客户那里出现了问题,比如说crash或者han
2012-07-18 11:36:25 1915
原创 C++编码中减少内存缺陷的方法和工具
转自:http://www.vckbase.com/index.php/wv/1518C++语言是桌面系统,尤其是系统软件、大型应用软件的主流开发语言。C++语言以其灵活性著称,同时也更复杂。利用C++编写健壮的代码,更具有挑战性。C++允许动态内存管理, 同时也容易导致更多和内存相关的问题。一般而言, 除了系统设计上的缺陷, 基于C++的软件的缺陷和错误大部分都和内存缺陷(主要包括内存访问错
2012-07-18 11:11:14 1176
原创 WinDbg调试DMP格式文件
前言:WinDbg是微软开发的免费源代码级的调试工具。WinDbg可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件。本文的讨论是在安装了Debugging Tools for Windows 的前提下进行的,下载地址可以参考我之前的文章。WinDbg对于dump文件的调试可以通过菜单设置Symbol File Path、Source File Path ,并可设置多个路径。1
2012-07-18 10:48:59 1576
原创 DMP文件的生成和使用
#include stdio.h>#include afxwin.h>#include dbghelp.h>#pragma comment(lib, "Dbghelp.lib")LONG WINAPI MyUnhandledFilter(struct _EXCEPTION_POINTERS *lpExceptionInfo){ LONG ret = EXC
2012-07-18 10:46:20 1525
原创 BoundsChecker使用
转载:http://www.cnitblog.com/qiuyangzh/archive/2005/07/14/975.html1 前言我在本文中详细介绍了测试工具NuMega Devpartner(以下简称NuMega)的使用方法。NuMega是一个动态测试工具,主要应用于白盒测试。该工具的特点是学习简单、使用方便、功能有效。NuMega共有三个独立的子功能——BoundsCheck
2012-07-18 10:29:39 790
原创 深入分析MFC中的CArray类
我们在使用vc进行比较复杂的编程时,经常需要用到复杂的数组结构,并希望能实现动态管理。由于C++并不支持动态数组,MFC提供了一个CArray类来实现动态数组的功能。有效的使用CArray类,可以提高程序的效率。MFC提供了一套模板库,来实现一些比较常见的数据结构如Array,List,Map。CArray即为其中的一个,用来实现动态数组的功能。CArray是从CObject派生,有两个模
2012-07-16 18:39:27 1602
原创 也谈Release版本排错
邓立波 深圳,2008-6作者联系方式:email: [email protected]: [email protected] 通常Release除错都是先通过SetUnhandledExceptionFilter捕获异常,然后生成报告文件,最后定位代码行,主要以下两种方法:(一)通过遍历调用栈,将其
2012-07-16 18:25:47 932
原创 字符集编码(GBK,BIG5,UNICODE等)与C++的string/wstring
GBK,BIG5等字符集编码范围的具体说明 一 预备知识1,字符:字符是抽象的最小文本单位。它没有固定的形状(可能是一个字形),而且没有值。“A”是一个字符,“€”(德国、法国和许多其他欧洲国家通用货币的标志)也是一个字符。“中”“国”这是两个汉字字符。字符仅仅代表一个符号,没有任何实际值的意义。2,字符集:字符集是字符的集合。例如,汉字字符是中国人最先发明的字符,在中文、日文、韩文
2012-07-11 21:56:44 3602
原创 UTF-8编码简介
在IE中选择UTF-8字符集UTF-8是UNICODE的一种变长字符编码又称万国码,由Ken Thompson于1992年创建。现在已经标准化为RFC 3629。基本简介 数据结构简要 作者: Marius Bancila 字符集简史 在所有字符集中,最知名的可能要数被称为ASCII的7位字符集
2012-07-11 21:53:39 1716
彗星小助手
2011-11-15
HttpWatchPro
2011-11-10
计算机基础知识考试宝典
2011-09-22
Vc中BSTR,char和CString的转换
2007-10-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人