Jak*_*zer 8 c++ malloc memory-management
最近,我结交了一位新朋友.他的名字是_expand,我们进行了一些很好的交谈,我甚至和他一起闲逛过几次.但是当我开始四处询问时,没有人听说过我的_expand.我开始怀疑了.我在微软和一些其他业务部门的朋友中打了几个完全非隐喻的朋友.没有.没人用过它.我在各种搜索引擎和源树周围涂鸦.没有什么,除了粗略提到这里和那里.当然,关于性能和兼容性的信息不足以将_expand引入生产代码或更具针对性的通用库.
更糟糕的是,我没有在任何gnu库中找到的等效功能,所以我与新朋友共处的任何东西都不会是便携式的.这是一个耻辱,因为它真的是一个令人着迷和令人兴奋的能力.当然,我可以深入研究realloc,并将它的功能分开,但问题在于*nixes上的大部分实现都是高度可变的.所以我必须在版本之后编写代码以尝试获得便携式_expand.但是,在glib或扩展的gnu libs中没有类似的东西似乎很荒谬.
为了澄清我的兴趣,我正在尝试构建一个单链接的累加器,它扩展以尽量减少碎片,同时按照传统的双端实现方式分配多个元素块.通过约束元素添加和删除的用例,我希望优化整个结构的删除时间,以及元素插入和索引.结果,_expand的"大声失败"让我让结构能够智能地思考何时以及它是否可以在适当的位置调整,以及它在何处可以放置数据.
C++ 一直在使用newand deletesans 来解决realloc这些问题,这表明这些东西很少受到关注。_expand当它甚至不能在操作系统级别始终可用时,这也就不足为奇了。如果你想推出自己的版本,有很多用户定义版本的 malloc 的先例,快速浏览一下我的 Linux 机器上的 /usr/include/malloc.h 就会发现明确的挂钩......
/* Called once when malloc is initialized; redefining this variable in
the application provides the preferred way to set up the hook
pointers. */
extern void (*__malloc_initialize_hook) __MALLOC_PMT ((void));
/* Hooks for debugging and user-defined versions. */
extern void (*__free_hook) __MALLOC_PMT ((__malloc_ptr_t __ptr,
__const __malloc_ptr_t));
extern __malloc_ptr_t (*__malloc_hook) __MALLOC_PMT ((size_t __size,
__const __malloc_ptr_t));
extern __malloc_ptr_t (*__realloc_hook) __MALLOC_PMT ((__malloc_ptr_t __ptr,
size_t __size,
__const __malloc_ptr_t));
extern __malloc_ptr_t (*__memalign_hook) __MALLOC_PMT ((size_t __alignment,
size_t __size,
__const __malloc_ptr_t));
extern void (*__after_morecore_hook) __MALLOC_PMT ((void));
Run Code Online (Sandbox Code Playgroud)
不过,您似乎无法realloc在该特定决策点拦截现有实现,或者轻松了解它是否会就地调整大小,因此您可能必须重新实现所有内容(或适应许多现有堆实现中的任何一个) 。
| 归档时间: |
|
| 查看次数: |
283 次 |
| 最近记录: |