- 论坛徽章:
- 2
|
我也很困惑……
似乎意图是提供更小粒度的定制: 可让new single object与 new array 使用不同的分配策略。
但因为整体接口设计得不好, 单独控制 new array并不好使……
为什么需要单独的分配array的接口? 它与single object的不同?
我能想到的:
1. 可以获得单个element 的大小, 而不是整个array的大小 —— 如同calloc那样。
举个例: 分配长度为4的char数组 vs 长度为1的int数组(假设sizeof(int)=4)
calloc 是能体现这种区别的: calloc(4, 1) vs calloc(1, 4)
而malloc就不能, 总是 malloc(4)
同时, C/C++的分配函数都没有alignment参数, 那alignment要么是一个固定值, 要么是根据size来计算。
如果是根据size来计算, 并且使用取size中的所有2因子的做法。
那alignment_of(1) = 1, alignment_of(4) = 4, 前者的限制更小, 满足需求的内存更多。
但operator new[] 没有类似calloc那样的区分, 而是类似malloc的整体size……
2. array可能需要扩展长度, 而single object不必
那么, single object可能会来固定大小对象的池。
而array 可能会来自可扩展的内存(尾部被保留), 或者干脆多分配一些; 以避免扩展时不够, 移动到新区域的开销。
但是呢…… new/delete的机制并没有在原地扩展的接口……
所以也用不上 |
|