hyengine内存分配问题之内存浪费如何解决

简介: hyengine内存分配问题之内存浪费如何解决

问题一:HYMFree 函数是如何将释放的 item 插入到所属 region 的空闲链表中的?


HYMFree 函数是如何将释放的 item 插入到所属 region 的空闲链表中的?


参考回答:

HYMFree 函数首先通过指针算术计算出 HYMItem 结构的地址(因为 ptr 指向的是 HYMItem 结构体中 ptr 字段之后的内存)。然后,获取该 item 所属 region 的地址,并找到当前 region 空闲链表的头部。接着,将释放的 item 插入到链表头部,通过修改 region->free_item_list 和 item 的 next 指针来实现。这样,释放的 item 就成为了链表中的第一个元素,便于后续快速分配。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/666227



问题二:HYM_ITEM_SIZE_OVERHEAD 在 HYMFree 函数中起什么作用?


HYM_ITEM_SIZE_OVERHEAD 在 HYMFree 函数中起什么作用?


参考回答:

HYM_ITEM_SIZE_OVERHEAD 是一个常量,表示 HYMItem 结构体中除了 ptr 字段之外的部分所占用的字节数。在 HYMFree 函数中,它用于通过指针算术计算出 HYMItem 结构体的实际地址。由于 ptr 是一个零长度的数组,它本身不占用结构体中的空间,但 HYMItem 结构体中还有其他字段(如 region、flags 和可能的 padding),这些字段的总大小就是 HYM_ITEM_SIZE_OVERHEAD。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/666228



问题三:为什么HYMFree 的实现能够在某些情况下比系统提供的malloc/free 快?


为什么 _HYMallocFixedSize 和 HYMFree 的实现能够在某些情况下比系统提供的 malloc/free 快?


参考回答:

_HYMallocFixedSize 和 HYMFree 的实现之所以能够在某些情况下比系统提供的 malloc/free 快,主要是因为它们采用了简单的内存管理策略,减少了内存分配和释放时的开销。通过预分配 pool 和维护空闲链表,它们能够快速地分配和释放固定大小的内存块,避免了系统 malloc/free 在处理小块内存时可能产生的碎片化和额外开销。此外,这些实现还利用了内存局部性原理,通过连续分配和释放相同大小的内存块,提高了缓存命中率,从而进一步提升了性能。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/666230



问题四:hymalloc中的内存 compact功能是如何工作的,并且为什么目前没有实现update功能?


hymalloc 中的内存 compact 功能是如何工作的,并且为什么目前没有实现 update功能?


参考回答:

hymalloc 中的内存 compact 功能用于清理完全未使用的 small region 中的 pool 和 large region 的所有 pool,以释放空闲内存。然而,目前它没有实现 update 功能,这意味着它不能在不同 pool 之间重新分配或拷贝 item,从而无法进一步优化内存使用。未实现 update 功能的主要原因是考虑到客户端使用场景中内存用量本身不高,且实现完整 compact + update 的复杂度较高,性价比不足。未来会根据实际业务需求再评估实现的必要性。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/666232



问题五:hymalloc 的内存分配机制有哪些局限性,以及如何通过调整参数来减少内存浪费?


hymalloc 的内存分配机制有哪些局限性,以及如何通过调整参数来减少内存浪费?


参考回答:

hymalloc 的内存分配机制存在几个局限性。首先,每个 item 都有 header,需要额外占用内存空间,导致内存浪费。其次,pool 级别的内存管理意味着只要 pool 中有一个 item 被使用,整个 pool 就不会被释放,影响内存释放效率。另外,large region 默认按 256bytes 对齐申请内存,也可能造成浪费。为了减少内存浪费,可以设定更小的 pool 默认 item 数量,及更小的对齐尺寸,虽然这可能牺牲少量性能。未来还可以引入更合理的数据结构和更完善的 compact + update 机制来进一步优化。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/666233

相关文章
|
测试技术 C语言 Perl
内存优化-使用tcmalloc分析解决内存泄漏和内存暴涨问题
其实我一直很想写关于tcmalloc的内存泄漏检测的文章,只是一直记不起来该如何下笔,有时项目太忙,在整理这方便的思考过少,另外遇到的问题也不是很多,直到最近用tcmalloc帮A项目排查...
|
8天前
|
存储 设计模式 监控
如何快速定位并优化CPU 与 JVM 内存性能瓶颈?
本文介绍了 Java 应用常见的 CPU & JVM 内存热点原因及优化思路。
|
4月前
|
JavaScript 前端开发 安全
如何避免闭包带来的内存消耗呢
【10月更文挑战第12天】如何避免闭包带来的内存消耗呢
54 0
|
6月前
|
存储 缓存 JSON
一行代码,我优化掉了1G内存占用
这里一行代码,指的是:String.intern()的调用,为了调用这一行代码,也写了几十行额外的代码。
|
7月前
|
监控 Java 中间件
FGC频繁导致CPU 飙升定位及JVM配置优化总结
FGC频繁导致CPU 飙升定位及JVM配置优化总结
229 0
|
9月前
|
算法 Java C++
【C/C++ 内存知识扩展】内存不足的可能性分析
【C/C++ 内存知识扩展】内存不足的可能性分析
102 0
|
9月前
|
缓存 算法 编译器
C/C++编译器内存优化技术:内存优化关注程序对内存的访问和使用,以提高内存访问速度和减少内存占用。
C/C++编译器内存优化技术:内存优化关注程序对内存的访问和使用,以提高内存访问速度和减少内存占用。
330 0
|
缓存 架构师 Linux
内存优化-如何使用tcmalloc来提升内存性能?提升的结果太不可思议
内存优化-如何使用tcmalloc来提升内存性能?提升的结果太不可思议
|
缓存 监控 算法
案例20-内存长期占用导致系统慢
内存长期占用导致系统慢
|
Java
项目实战20—内存长期占用导致系统缓慢
项目实战20—内存长期占用导致系统缓慢
113 0