3D游戏引擎入门课程7——内存管理与插件机制

内存管理与插件机制

内存管理和扩展插件概述

内存管理

内存管理是引擎底层和核心内容之一，引擎中几乎所有顶层基类都是内存分配的类，所以内存管理决定了系统的运行效率。

引擎的内存管理从对象可分为 CPU 主内存和 GPU 的显卡内存；从操作类型可分为数据结构的分配和释放，以及数据访问。

第三方标准库，如 STL、BOOST 等，已经提供了各种数据结构的内存分配和管理，使用这些标准库可以简化游戏引擎的底层设计。如 STL，将数据类型抽象为容器，将数据组织和算法分离，其中容器主要包括三种：序列容器（vector, deque, list 等）、关联容器（map, multimap, set, multiset 等）、容器适配器（stack, queue, priority_queue 等）。

第三方库还提供了内存分配的保护机制，避免内存指针的使用错误，防止内存泄漏，如 shared_ptr，weak_ptr，scoped_ptr 等。

动态内存分配是指使用的时候分配内存，不用的时候释放内存，但其开销很大，游戏引擎经常使用定制分配器做动态内存分配，包括：

扩展性

引擎的可扩展性要求：

插件技术：

插件是可独立开发的程序块，由系统的插件接口管理。

基于插件的体系架构是一种灵活的组件式结构。

插件接口股安咯程序可以动态地调用多个插件，而不必或很少修改程序。

优点在于：引擎核心功能简洁清晰；插件之间耦合度低，便于维护和修改；引擎根据需要选择插件，提高运行效率。

插件接口的设计原则包括：通用性、兼容性、稳定性、可测试性、可维护性。

插件管理机制：智能化识别插件，动态判断插件进行安装或卸载；自动化调用；管理插件间的通信；对插件进行初始化和配置管理。

内存管理和扩展插件实现实例

OGRE 内存管理和扩展插件

OGRE 中内存管理的分类：

OGRE 中的智能指针 SharedPtr:

OGRE 中的 GPU Buffer 管理：

OGRE 中插件的实现机制：

OGRE 的插件类 Plugin:

OGRE 中的 plugin.cfg