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

Code@Pig Home

喜欢背着一袋Code傻笑的Pig .. 忧美.欢笑.记忆.忘却 .之. 角落

 
 
 

日志

 
 

[C4] Memory Management  

2012-12-30 11:07:04|  分类: 3d_C4 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Heap => MemPool => MemBlock
MemBlock, 一次 new 会返回一个 MemBlock,保证 alignment
MemPool, 管理着多个 MemBlock,从 A MemPool 出来的 MemBlock,delete 之后,还是回到 A MemPool
Heap, 管理多个 MemPool, 并维护一个快速查找 free block 的结构

MemoryMgr, 各种 static 接口
通用的 new, delete,使用 MemoryMgr::mainHeap。
对于多线程 new/delete,通过 lock Heap 来保证。线程很多的话,性能可能会有损耗。
还可针对特定的类,定制独享的 Heap,保证数据的 cache-line friendly,并且 new/delete 的时候 lock-less。

windows 下,通过 HeapAlloc(GetProcessHeap(), …) 来保证所有 DLL 都从一个 SystemHeap 中申请内存。
虽然每个 Project 都用 /MT 选项(static link crt),但可以避免 A DLL malloc, B DLL free 的问题。
原理:C4.exe 通过 __declspec(dllexport) 将 MemoryMgr::mainHeap 导出给其它 DLL,保证所有 DLL 启用同一个 mainHeap。
这是目前我见到的 /MT + DLL、绕开crt heap问题的完美解决方案。

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

历史上的今天

在LOFTER的更多文章

评论

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

页脚

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