我malloc()
出于某种原因包装.我希望有一些(系统特定的,运行时)信息,而不仅仅是调用它.例如:
malloc()
用于分配的最小对齐是什么?realloc()
将使用相同的原始地址成功或需要移动.注意:我希望尽可能的方便,但特定于平台的答案仍然相关:Linux,Windows,MacOs,Un*x.
glibc实现malloc_usable_size
,返回可供应用程序使用的实际分配大小.一些替代malloc
方案也可以实现它.请注意,realloc
即使请求的新大小大于该大小,glibc也可以执行不移动malloc_usable_size
,因此它不能用于此目的.
对于你要问的其他事情,没有明确的答案.从理论上讲,malloc
应该提供至少与之对齐的内存_Alignof (max_align_t)
,但是由于各种原因,许多实现都不会这样做:
max_align_t
来自GCC之类的编译器,因此反映了编译器的世界观,而不是malloc
提供的内容(参见glibc malloc与GCC 7不兼容的例子).C标准假定统一实现,但在实践中,编译器,C运行时库,甚至malloc
是单独的组件,从不同的源构建,并在不同的发布周期,因此它们可能会失去同步,并且编译- 时间常数,例如_Alignof (max_align_t)
很少能准确反映malloc
运行时的内容.malloc
实现可能具有导致较大的对准那么什么由体系结构规范所需的内部约束.应用程序显然不能依赖于它,但它仍然是可观察的.关于不移动的realloc
问题甚至没有正确的答案:对于多线程程序,另一个线程可能会放置一个分配,阻止在确定调整大小限制和实际realloc
调用之间扩大当前分配.一个非移动版本realloc
可能是一个有用的补充,但接口将是完全不同的(可能的事情请尽可能调整大小到这个最大值而不移动块,否则返回最大可能的大小或类似的东西) .
归档时间: |
|
查看次数: |
146 次 |
最近记录: |