注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

风的驿站

一徐清风,半指烛光,觥筹已净,只余茶香。残卷一章,妙趣非常,忽闻帘响,愿闻其详?

 
 
 

日志

 
 
关于我

喜欢写生 编程 音乐 设计 喜欢把自己的想法变成实实在在的东西 喜欢安静的做一些事情 CSDN博客:http://blog.csdn.net/qwertyupoiuytr

网易考拉推荐

【原创】Box2D v2.3.0 用户指南(第三章)  

2014-05-22 15:30:57|  分类: Box2D |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

第三章 公共模块(Common

3.1 简介

公共模块包含设置(settings),内存管理(memory management),矢量计算(vector math)。

 

3.2 设置

头文件b2Settings.h包含:

·   诸如int32float32这类数据类型

·   常量(constants

·   分配的封装(allocation wrapper

·   版本号

 

类型(types

Box2D定义了多种数据类型,例如float32int8等等,以方便我们定义不同大小的结构。

 

常量

Box2D定义了很多常量,这些常量在b2Settings.h中做了说明。通常我们不需要去修改这些常量。

 

分配的封装

设置(settings)的文件定义b2Allocb2Free,用于大块内存分配,你可以将这些调用转移到你自己的内存管理系统中。

 

版本

b2Version结构保存当前的版本信息,你可以在运行时调取。

 

3.3 内存管理

Box2D的设计理念中,很多设计决策都是为了快速高效的使用内存。这一节我们会讨论Box2D怎样和为什么要分配内存。

Box2D倾向于分配大量的小物体(范围大约在50-300字节)。使用mallocnew方法在堆(heap)空间上分配内存对于小物体来说效率很低,并且容易产生内存碎片(fragmentation)。这些小物体的生命周期大多很短,例如接触(contact),可能仅仅持续几个时间片段。因此我们需要一个分配器(allocator),能够高效的为这些物体分配堆空间。

Box2D的解决方法是使用一个叫做b2BlockAllocator的小物体分配器(small object allocator, SOA),SOA负责维护一定数量的大小可变的可增长的内存池(pool),当遇到内存请求时,SOA返回一块儿大小最合适的内存块,当一个内存块被释放的时候,它实际上被内存池回收了。这些操作保证了快速响应内存的分配和释放,不会产生大量的堆请求。

由于使用了SOA,在Box2D中你不必再去new或者malloc一个物体、装置或者关节对象了,有一个例外,你需要自己动手分配一个b2World对象,b2World类中提供了工厂方法用于创建物体,装置和关节,以便Box2D通过SOA将枯燥的处理细节包装起来。因此,我们永远也不要对物体,装置或者关节手动调用delete或者free来释他们。

在执行一个时间间隔(time step)时,Box2D需要一些临时内存空间,这部分空间它通过一个栈分配器(b2StackAllocator)来避免单步(per-step)堆空间分配,你不需要跟栈分配器打交道,但是知道它的存在还是有必要的。

 

3.4 数学(math

Box2D包含了一个小的向量和矩阵模块,为了满足Box2D以及API内部调用的需求。所有的成员都提供了调用接口,所以你也能够在你的工程中调用他们。

数学库代码非常简洁以便于移植和维护。

Box2D v2.3.0 用户指南(第三章) - 远行的风 - 风的驿站

  评论这张
 
阅读(313)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017