SegFault: mi_free_size_aligned / mi_free_size 在小型过度对齐分配中
作者: Mnwa创建于 2026年9月14日更新于 2026年9月14日
在 mimalloc v3 版本中,`mi_free_size(p, size)` 会将每个 `size <= MI_SMALL_SIZE_MAX` 都路由到 `mi_free_small`,该函数通过将 `p` 向下对齐到 `MI_SMALL_PAGE_SIZE` 来定位页面,而不是进行页面映射查找。这只在块位于小页面时才有效。具有大对齐的小块会过分配(`size + alignment - 1`),最终会进入中等页面,因此计算的页面指针是垃圾,进程会崩溃。`mi_free_size_aligned(p, size, alignment)` 接收了对齐,但将其丢弃并委托给 `mi_free_size`,因此使用文档中指定的输入("已分配对象的大小","分配时请求的对齐")调用它就足以触发崩溃。
内容来源: microsoft/mimalloc