zoukankan      html  css  js  c++  java
  • 《Game Engine Architecture》学习笔记内存管理1

    内存管理

    内存使用效率和两个东西有关:

    1,同过new,malloc操作进行动态内存分配很慢,尽量避免,可以通过使用传统内存分配来减少分配开销。

    2,CPU处理连续的内存区域比处理离散的内存区域要快。所以为了提高效率,要对内存碎片进行处理。

    通过这两条路线来优化内存管理代码。

    1.优化动态内存分配

    通过malloc()和new()等进行动态内存分配是基于堆的。典型的非常慢。

    因为:

    1)堆是一个通用存储区域,它被控制来可以分配任何大小的内存,使得malloc,new等函数需要更多的上层管理。导致了缓慢。

    2)使用malloc,new等函数时系统首先会进行环境切换,切换到核心模式处理内存分配申请,然后又切换会程序,这样的环境切换也增加了开销。

    下面是一条约定俗成的游戏开发内存分配规则:

    keep heap allocation to a minimun,and never allocate from the heap within a tight loop.

    尽量少的使用malloc和new 等基于堆的动态分配,更不要在一个紧密的循环里面使用。

    当然,没有任何游戏引擎避开了动态内存分配,所以绝大部分的游戏引擎都有自己的一个或者多个内存分配器。一个自己的内存分配器在刚刚提到那两点上有比操作系统更好的Heap分配器性能。第一,一个自己的内存分配器可以安全的访问一块被分配好的内存(她自己通过malloc()或者new或者已经声明的全局变量)。这样可以允许这些访问在user mode下以及避免了开销昂贵的操作系统上下文切换。第二,对于各种内存使用模式处理上,一个自定义的内存分配器也比一个通用的Heap内存分配器更有效率。

    有几种形式的传统分配器:

    1)基于栈的分配器,双向栈。

    2)内存池(通常用于同样尺寸的多段内存)

    3)线性分配器

    4)单帧,双帧内存分配器(用于只在一帧或者两帧中使用的临时数据,每一帧的开始时需要clear)

  • 相关阅读:
    有些事情,我们需要坚持到底
    SEO策略与细节:细节决定成败
    织梦DEDECMS更新6月7日补丁后出现版权链接的删除办法
    argparse模块的应用
    多态实现原理剖析
    tensorflow中tf.ConfigProto()用法解释
    tensor flow中summary用法总结
    tensorflow-gpu版本出现libcublas.so.8.0:cannot open shared object file
    python3自带工具2to3.py用法
    公司管理系统之设计
  • 原文地址:https://www.cnblogs.com/wonderKK/p/2283846.html
Copyright © 2011-2022 走看看