C++不应该有垃圾回收

[TOC] 只要C/C++还是操作系统的主要实现语言,C/C++就不会有内置垃圾回收机制。 近日看了这本书前几章,先声明书中没谈我的这个观点。只是在理解了书中主旨后,回想起常有人抱怨C/C++没有垃圾。顿足思片刻,立此结论。 我大概看前面几章,介绍了如下几个GC算法:位图标记,复制gc,引用计数和分代gc(后面章节还有很多)。尽管这么多算法,但每种算法都解决同一个问题,对象什么时候被释放才是效率最大。因为频繁使用的对象就算没被引用,在空间和性能允许的条件下也应该被继续保留,而不是立即清除。保留多久的问题上就是各个GC实现细节差异。引用计数认为当计数小于等于0时就要释放对象,而分代认为最后创建的对象会被优先考虑GC。而算法在性能和空间的微小取舍上也出现了各个版本。如标记GC算法...
Click to read more ...

Unity ugui非常不友好!自定义控件创建流程。

[TOC] 刚接触unity ugui,觉得以下几点非常不友好 好的工具软件都有顺手的快捷键,为有如此编辑过程才能高效生产。然而!!!万万没想到!Unity居然没有创建控件的快捷键。目前都要从Hierarchy窗口右键->UI,或者菜单GameObject->UI创建控件。 很多控件不需要勾选raycastTarget。但创建的控件默认勾选raycastTarget。而选了raycastTarget的控件,会额外参与摄像机的UI事件计算。所以为了避免不必要的消耗,我们在每次创建控件后,都要手动关闭该选项。 各个游戏项目可能使用了各自的非默认字库。但Text默认使用了Arial.ttf字库。所以每次创建后,都要重新选择字库。 有如下几个方法解决上面问题 ...
Click to read more ...

Unity3d IL2CPP 内存对齐错误

[TOC] unity3d il2cpp安卓包运行异常,出现信号错误signal 7 (SIGBUS), code 1 (BUS_ADRALN)。 03-26 10:49:24.270 20868 20887 E CRASH : signal 7 (SIGBUS), code 1 (BUS_ADRALN), fault addr ba77601a 03-26 10:49:24.270 20868 20887 E CRASH : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 03-26 10:49:24.270 20868 20887 E CRASH : Build type 'Release...
Click to read more ...

Raknet研究

[TOC] 游戏性能优化,需要从多个层面进行。美术资源层,降低不必要的网格顶点数、使用可硬件加速的贴图格式和合并渲染队列等。策划需求层,需要掌握技术基本原理,规避技术难度高、风险大的游戏需求、使用“障眼法”掩盖技术缺陷等。程序技术层面,尽可能不改变需求下实现更优的算法、同时使用严格的测试用例(如同步坐标还原测试)校对核心算法的准确性。而在本文旨在考虑的网络层性能忧化,除了考虑数据流量大小和更忧化封/解包算法外,还可以从OSI七层网络协议中寻找优化,如网络加速等。其中较容易操作的是网络传输协议,协议代表有TCP、UDP和SCTP。SCTP有良好的特性,但该协议起步晚目前尚未广泛使用,大多应用程序开在TCP和UDP中作出选择。 UDP更适合实时类游 任何技术都有优缺点,是场景选择技术,...
Click to read more ...

源码安装v8报错

想试试v8嵌入到c++开发 网上写编译v8的文章不多,且我觉得大部分写得不够详细。 官方Building from Source已提供安装步骤,本文没必要对里面的大部分内容再费唇舌 下文记录编译&安装v8所遇到的问题,希望能帮到大家。 v8版本:v8 6.9 系统环境: [amao@localhost x64.release]$ lsb_release -a LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch D...
Click to read more ...

libevent 偏移读取缓存evbuffer_copyout_from

本文约定的协议包格式 红色区域:表示5个字节长度的协议包首部(PKG_HEAD)。前1字节存放标识码(TAG),后2字节存放数据内容长度(BODY_SIZE)、再后2字节存放整个网络包长度(PKG_SIZE) 蓝色区域:表示n个字节长度的数据内容(BODY), 读取一个完整网络包 Libevent 2.0.5以前,必须先drain包头信息,才能取出其中的整包长度PKG_SIZE。再将之后收到的内容数据BODY,与包头合并成一个完整的网络包。 Libevent 2.0.5以后,新增了两个接口evbuffer_copyout_from,见libevent-book evbuffer_copyout_from允许偏移pos个字节位后,从libevent输入缓存区拷贝dataLen个字...
Click to read more ...

提高工作效率的shell命令

网络上介绍linux命令的文章很多。我相信通过百度、Google都轻易地搜索出来,或者使用命令man YOUR_COMMAND,会列出YOUR_COMMAND的使用手册。再造“轮子”并不是我的意愿。本文从常见的实践使用出发,介绍一些认为能提高开发效率的操作&流程。 这个网站不错,里面有详细的命令选项说明和使用实例。 前后台切换 Windows系统里,可以通过ctrl + d、alt + tab,将应用分别切换前后台。在命令行界面系统下,使用以下将几条命令就能完成同等功能。 命令 说明 ctrl + z 将当前前台执行的命令放到后台,并且暂停 j...
Click to read more ...