C/C++
老友小明哥
星星之火,照亮你路
展开
-
游戏服务端之内存池
内存池(Memory Pool)一、前言1、操作系统的内存分配方式1.1、连续分配方式顾名思义,这种分配方式,会将进程分配在连续的空间。连续分配方式一般可以分为固定分配方式、动态分配方式和伙伴系统(固定分配方式与动态分配方式的折衷方案)。1.2、基本分页存储管理方式1.3、基本分段存储管理方式注:以上说的分配方式,自个可以到网上去搜索一下,方便理解以下内容。原创 2014-01-05 00:03:23 · 6203 阅读 · 15 评论 -
游戏服务端之xml类型转换
上一篇博文我已经说明了服务端添加tinyxml的基本操作及基本用法。我的服务端之添加xml解释器http://blog.csdn.net/yitouhan/article/details/17453159但是可以看出tinyxml读出的数据是不做类型匹配的,也就是说tinyxml读出的数据都是字符串。但是在实际应用中,我还需要其它的数据类型,例如整型和浮点型。这里主要要说明的是istr原创 2013-12-23 00:02:15 · 3101 阅读 · 1 评论 -
游戏服务端之AOI概述
AOI(Area Of Interest),中文就是感兴趣区域。通俗一点说,感兴趣区域就是玩家在场景实时看到的区域;也就是AOI会随着英雄的移动改变而改变。一般在游戏的中,游戏的世界都是由各种场景组成,场景中有着各种各样的Obj(英雄、怪物、NPC和掉落物品等等)。当英雄在移动的时候,玩家需要看到其它在自己视野内玩家的英雄;需要看到在自己视野内的怪物;需要看到打BOSS掉落的物品;……。有原创 2013-12-29 00:27:53 · 13100 阅读 · 2 评论 -
游戏服务端之添加xml解释器
在游戏服务端中,我们会将可变的东西写数据库里,而将一成不变的东西写在配置里。在现实开发过程中,大多数开发者会选用xml作为服务的配置。原因是xml树形结构化表示、标记清晰及易于理解和方便移植。下面我将会为我的服务端添加tinyxml。tinyxml是一个简单的,轻量级的,由C++实现的XML文档的解析器,它可以被其它程序方便地集成进去使用。同时tinyxml也是免费开源的。因此我会将tinyx原创 2013-12-21 00:04:22 · 10345 阅读 · 0 评论 -
使用桥接模式时要注意的问题
什么是桥接模式?举个例子:平时我们我们的USB(Universal Serial Bus(通用串行总线)),其实其设计的模式就是桥接模式。桥接模式的作用就是:将抽象部份与它的实现部份分离,使它们都可以独立地变化。也就是说无论USB插的是U盘,还是小风扇。都只是外部的独立变化,电脑内部是不受影响。不扯远了,这里不是主要说桥接模式的用法。下面看看使用桥接模式需要注意一个小小的问题。http://blo原创 2014-11-26 00:06:29 · 3937 阅读 · 5 评论 -
游戏服务端之C++封装Mysql
很多缺少实际工作经验的同学会认为,操作Mysql还需要封装?!直接写sql语句操作就可以了。其实封装Mysql有以下的好处:1、更加安全。即使你是相当谨慎的一个程序员,就算在几百处甚至几千处地方写sql操作Mysql也避免不了会出现写错表名,字段名写错了或者写少写多了,符号写错等等。封装可以解决这些问题。2、更好的移植性。封装其实就是一些共性的集合,这样当然具有更好的移植性了(这样能方便像原创 2020-08-18 21:16:33 · 4080 阅读 · 7 评论 -
游戏服务端之C++游戏服务端防崩溃
在游戏开发当中,不用我多说了,游戏的稳定性是相当重要的。为了追求游戏的稳定性,很多开发者都会选择脚本语言作为游戏的主要开发语言。因为使用脚本语言,即使游戏出现重大的bug,由于脚本支持热更的天然优势,使开发者更迅速地解决问题;而且脚本的良好容错性,也会使游戏系统不会轻易崩溃。但是,一些即时性游戏需要更高性能的,开发者可能会选择C/C++作为开发语言,但是怎样来保证游戏的稳定性呢?关键词是原创 2013-12-07 00:03:41 · 6052 阅读 · 4 评论 -
游戏服务端之C++网络库对外接口
大多数的情况下,游戏的服务端都是在Linux下运行,但是Linux下做开发C/C++的开发相对来说是比较困难的。所以一般来说,游戏的服务端都是做成可移植的,这样方便在Windows下做开发。也就是说,服务端既可在Windows下运行,也可以在Linux下运行。说了这么多,看似与网络链接半毛钱关系都没有。其实不是这样的,就像Lua一样,既可以在Windows下调用它,也可以在Linux调用它,关原创 2013-12-15 00:01:41 · 4636 阅读 · 0 评论 -
一种有效避免死锁的互斥锁设计
下面是摘自网络的一段话,我觉得很好;对认识锁很有帮助。“为什么要加锁?加锁是为了防止不同的线程访问同一共享资源造成混乱。打个比方:人是不同的线程,卫生间是共享资源。你在上洗手间的时候肯定要把门锁上吧,这就是加锁,只要你在里面,这个卫生间就被锁了,只有你出来之后别人才能用。想象一下如果卫生间的门没有锁会是什么样?什么是加锁粒度呢?所谓加锁粒度就是你要锁住的范围是多大。比如你在家上原创 2014-06-29 00:39:34 · 3984 阅读 · 5 评论 -
我的服务端之有限制使用Thread
前言:多线程是一把双刃剑,不要盲目使用多线程!使用多线程的优点:1、支持并发。2、提高程序执行效率,这里又可以分为两种情况:单线程情况下,I/O操作会让CPU处于"等待"状态,因此多线程能更好利用CPU;多核CPU的出现,让多线程程序有更好的执行效率。缺点:1、造成一定的线程切换开销。2、资源容易出现竞争,甚至死锁。3、多个线程"同时"对某块内存进行读写,容原创 2014-02-08 00:04:08 · 2492 阅读 · 5 评论 -
用python写makefile
温馨提示:阅读本文的同学最好能了解makefile和python的编写规则。不懂的同学可以先保存在收藏夹,以便日后查看。其实之前我一直很懒,我不想了解makefile规则,因为在linux下开发我一直使用Qt creator。(很多时候正是一些“懒人”的创造力,解放了我们的双手,显然原创 2014-06-14 00:13:11 · 13381 阅读 · 0 评论 -
一个C++的ElasticSearch Client
ElasticSearch官方是没有提供C++的client的;因此决定自己写一个,命名为ESClienthttps://github.com/ATinyAnt/ESClient(手下留星 star)优势是简单易用:*封装大幅度减少了直接写DSL的机会,避免了一些非逻辑错误*只需要包含头文件 request.h即可以使用因为...原创 2019-07-17 22:05:24 · 3084 阅读 · 3 评论