游戏效率优化(2) 使用const关键字

游戏效率优化(2)使用const关键字

DionysosLai  2014-5-15

使用const有很多好处,比方保护被修饰的东西,防止意外修改,提高程序健壮性等作用。不过使用const 可以提高程序运行效率,却很少有人知道。

下面看几个例子,在看cocos2d源码时,我们经常会看到如下类似的代码:

ccpAdd(const CCPoint& v1, const CCPoint& v2)
{
    return v1 + v2;
}
ccpSub(const CCPoint& v1, const CCPoint& v2)
{
    return v1 - v2;
}

看到这段代码,我们首先会觉得很奇怪,函数设计的本意是不要改变形参的值,通常我们会这样写道:

ccpAdd(const CCPoint v1, const CCPoint v2)
{
    return v1 + v2;
}

这样,就可以不用改变函数中形参的值,那么cocos2dx的作者又为什么要将形参定义成引用类型呢?

这个问题的原因在于:在调用函数时,如果传入的值不是指针、引用的话,那么会临时动态申请一块内存,保存传入的参数,接下来函数所有对这个参数的操作均会在这个内存中进行。如果我们传入的引用的话,那么就可以直接在参数内存中调用,而不需要临时动态申请空间,最后还要销毁这块空间问题。但,使用引用的话,又存在改变参数值的问题,因此我们会给引用加上“const”修饰符,防止被修饰的东西,发生意外修改。

这个问题,在这之前自己也没发现,后来是同事告诉我这个现象。SOGA,一起努力,我也把这个方法告诉大家。

游戏效率优化(2) 使用const关键字

时间: 2024-11-23 18:33:37

游戏效率优化(2) 使用const关键字的相关文章

(转)as3效率优化

1.改进算法无论对于那一种程序,好的算法总是非常重要的,而且能够极大地提高程序性能,所以任何性能的优化第一步就是从算法或者说程序逻辑的优化开始,检查自己的程序是否有多余的运算,是否在没有必要的时候做了无用功,往往从这些方面就能找到那些导致性能低下的地方. 2.优化细节代码针对细节总是好的,有一些小技巧比如:用 var obj:Object = {}; 要比 var obj:Object = new Object();要好:var arr:Array = []; 要比 var arr:Array

c++中const关键字全面总结

一.const作用 1.const定义常量 注意:const只对它左边的东西起作用,唯一的例外就是const本身就是最左边的修饰符,那么它才会对右边的东西起作用. (1)const修饰变量,以下两种定义形式在本质上是一样的.它的含义是:const修饰的类型为TYPE的变量value是不可变的. TYPE const ValueName = value; const TYPE ValueName = value; (2)将const改为外部连接,作用于扩大至全局,编译时会分配内存,并且可以不进行初

Cocos2dx项目--动作类游戏内存优化--Spine结构分析

项目接近尾声,需要做加载效率优化和内存优化. 在加载Spine制作的资源时候,我们需要将文件(.json)进行解析,然后创建对象 spAtlas* t_atlas = spAtlas_createFromFile(altas_name.c_str(), 0); 第一步 //加载纹理文件 spSkeletonJson* json = spSkeletonJson_create(t_atlas); 第二步 //根据上步产生的对象穿件JSON骨架 spSkeletonData* skeletonDat

c++程序的效率优化初涉

能写出稳定高效的程序一直是程序员所追求的,今天就和大家一起探讨一下关于C++程序优化的几点看法. 由于C/C++语言的复杂性,致使C++编译器隐藏了层层幔布,我们不经意的一条语句都可能是编译器幕后几经周折的结果,在要求程序高效运行的环境下,每一条语句都会让我们慎之又慎,而程序优化又是个十分广泛的话题,包括程序架构设计的优化,语言本身的优化,编程技巧和策略等等,如此大的范围非我能力所及,这里谈的优化就是在实际开发中遇到的问题. 一.  举手之劳的小差别 既然说优化就一定要仔细,不放过任何微小的细节

C语言之头文件,static与const关键字

[前言] 最近几个月在做一个C语言代码重构的项目,过程中也让我对之前在书本上学习到的东西有些补充和巩固,在本博中总结记录下,梳理下零碎的知识点和经验也加深印象,书写是为了更好地思考.平时也都是用印象笔记之类的自己写写笔记,今天整理成博客,以便自己以后回顾. [正文] C语言头文件:将其理解为C语言模块化编程向外提供一个接口描述文件.一般包括一些供外部函数或者文件使用的变量声明,函数声明,数据类型定义以及宏定义等.举例: /*************************************

转 iOS和android游戏纹理优化和内存优化(cocos2d-x)

iOS和android游戏纹理优化和内存优化(cocos2d-x) (未完成) 1.2d游戏最占内存的无疑是图片资源. 2.cocos2d-x不同平台读取纹理的机制不同.ios下面使用CGImage,android和windows下是直接调用png库.我测试了下,使用png库直接读取png会比CGImage还要节约1mb左右内存(图片所占内存4mb)但是速度要比CGImage慢一倍.时间和空间如何取舍就看实际情况了.不过最佳的选择似乎是pvr(即使android版本,即使不使用pvrtc4).

ASO优化经验:APP关键字优化的技巧

当开发首款产品的时候,可能你根本连ASO是什么都不知道,因为有太多别的事情需要你做.大多数新手开发商甚至到游戏要进入Appstore的时候才知道有“关键字”这件事要去研究.正因为这些开发商几乎没有在关键字上花时间,这会直接导致他们损失大量潜在下载量. 有数据显示,63%的下载量源于应用商店的搜索行为,所以开发商一定要确保在关键字上下足功夫. 一.建立一个关键字库 不过,在建立你的关键字库之前,你必须熟悉一些ASO的基本术语: 1.关联性(Relevance):某个特定的关键字与你的应用以及目标用

C/C++中const关键字的用法及其与宏定义的比较

1.const关键字的性质 简单来说:const关键字修饰的变量具有常属性. 即它所修饰的变量不能被修改. 2.修饰局部变量 1 const int a = 10; 2 int const b = 20; 这两种写法是等价的,都是表示变量的值不能被改变,需要注意的是,用const修饰变量时,一定要给变量初始化,否则之后就不能再进行赋值了,而且编译器也不允许不赋初值的写法: 在C++中不赋初值的表达一写出来,编译器即报错,且编译不通过. 在C中不赋初值的表达写出来时不报错,编译时只有警告,编译可以

Unity3D游戏GC优化总结---protobuf-net无GC版本优化实践

protobuf-net优化效果图 protobuf-net是Unity3D游戏开发中被广泛使用的Google Protocol Buffer库的c#版本,之所以c#版本被广泛使用,是因为c++版本的源代码不支持Unity3D游戏在各个平台上的动态库构建.它是一个网络传输层协议,对应的lua版本有两个可用的库:一个是proto-gen-lua,由tolua作者开发,另外一个是protoc,由云风开发.protobuf-net在GC上有很大的问题,在一个高频率网络通讯的状态同步游戏中使用发现GC过