Box2D v2.3.0 用户指南(第三章)

翻译 2017年01月03日 21:45:46


第三章 公共模块(Common)

3.1简介

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

 

3.2设置

头文件b2Settings.h包含:

·  诸如int32,float32这类数据类型

·  常量(constants)

·  分配的封装(allocation wrapper)

·  版本号

 

类型(types)

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

 

常量

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

 

分配的封装

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

 

版本

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

 

3.3内存管理

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

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

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

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

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

 

3.4数学(math)

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

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




相关文章推荐

Box2D v2.3.0 用户指南(第九章)

Box2D v2.3.0 用户指南

Box2D v2.3.0 用户指南(第八章)

Box2D v2.3.0 用户指南

Box2D v2.3.0 用户指南(第十章)

Box2D v2.3.0 用户指南

Box2D v2.3.0 用户指南(第七章)

Box2D v2.3.0 用户指南

Box2D v2.3.0 用户指南(第十一章)

Box2D v2.3.0 用户指南

Box2D v2.3.0 用户指南(第二章)

Box2D v2.3.0 用户指南

Box2D v2.1.0用户手册(10)——世界(World Class)

第10章 世界(World Class) 关于 b2World类包含物体和关节。它管理着模拟的方方面面,并允许异步查询(就像AABB查询和光线投射)。 你与Box2D的大部分交...

Box2D v2.1.0用户手册(3)——公共模块(Common)

第03章 公共模块(Common) 3.1 关于 公共模块包含了配置(Settings),内存管理(memory management)和矢量数学(vector m...

Box2D v2.1.0用户手册(6)——夹具(Fixtures)

第06章 夹具(Fixtures) 6.1 关于 回想一下,形状并不知道物体的存在,可以独立使用。因此Box2D需要提供b2Fixture类,用于将形状附加到物体上。 fi...

Box2D v2.1.0用户手册翻译 - 第12, 13, 14章

内容很多摘自 Aman JIANG(江超宇)翻译的Box2D v2.0.1 用户手册 第12章 调试绘图(Debug Drawing) 实现 b2De...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)