腾讯游戏学院-----游戏引擎中的多线程和内存管理【笔记一】

文章仅记录部分内容作为笔记,对视频感兴趣的可见下面链接的原视频:

https://gameinstitute.qq.com/course/detail/10119

课程目录:

【第一章】内存

      - 游戏机内存演化历史
      - 游戏引擎内常用的内存分配器介绍
      - 面向数据的设计方法
      - Entity Component System


【第二章】多线程

      - 主渲染线程结构
      - 任务系统

 

正文:

一、内存

 游戏的性能优化从哪出发?从内存的使用效率上出发的。

1.1 游戏机捏村演化历史

1.2 游戏引擎内常用的内存分配器介绍

  • Malloc/Free

支持任意尺寸内存分配

Free开销远远大于申请开销

绝 大多数的实现依赖Global Mutex(如果说是多线程的程序,频繁的申请释放内存,会发现你的性能并没有随着多核而SCALE)

容易造成内存碎片 

  • Linear,Stack Allocator

 Linear Allocator(线性分配器):

申请=线性增长

释放=do nothing

特定时间重置

典型应用场景:每帧生成的渲染状态数据,每帧送给GPU骨骼动画数据

好处:非常容易支持Lockfree ,效率极高--只需要一个index递增操作

Stack Allocator(栈分配器)

实现类似线性分配器

LIFO by marked positions

典型应用场景:关卡资源加载

好处:性能类似线性分配器,可以按需进行释放,可以作为其他allocator的back allocator

  • Freelist Allocator

用链表的方式管理的连续内存

申请/释放复杂度O(1)

缺点:连续申请返回的内存不连续,通常是固定尺寸

典型应用场景:粒子特效缓冲池

  • Buddy Allocator

支持2^n大小的内存

自动合并相邻内存

应用场景:可能会持续多帧,GPU上的内存管理

  • Handle Based Allocation

 略

1.3 面向数据的设计方法

  • 对采用面向对象设计的系统的优化方法

  • Entity Component System

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值