免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: liwangli1983

关于operator new和operator new[]的区别 [复制链接]

论坛徽章:
0
发表于 2011-01-31 19:34 |显示全部楼层
编译器在当前模块中同时加入global operator new & global operator new[];C++规范就这么规定的。
至于为 ...
扫地大叔 发表于 2011-01-31 19:16



    原来如此,谢谢

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
发表于 2011-02-01 06:25 |显示全部楼层
我也很困惑……

似乎意图是提供更小粒度的定制: 可让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的机制并没有在原地扩展的接口……
所以也用不上

论坛徽章:
0
发表于 2011-02-01 08:25 |显示全部楼层
我也很困惑……

似乎意图是提供更小粒度的定制: 可让new single object与 new array 使用不同的分配策略 ...
OwnWaterloo 发表于 2011-02-01 06:25



    "似乎意图是提供更小粒度的定制: 可让new single object与 new array 使用不同的分配策略。"

应该是这个原因吧

论坛徽章:
0
发表于 2011-02-01 22:49 |显示全部楼层
回复 5# liwangli1983

http://en.wikipedia.org/wiki/Typeid的Reference里面找到的:www-d0.fnal.gov/~dladams/cxx_standard.pdf。

那啥,问题看错了orz...

想了会儿觉得应该也只有这个原因了——“似乎意图是提供更小粒度的定制: 可让new single object与 new array 使用不同的分配策略”。

Google了一下:
http://www.scs.stanford.edu/~dm/home/papers/c++-new.html

Why are operator new and operator new[] different? One often wants to implement a simple new/delete for a particular class (for instance by keeping a freelist) while not worrying about cases where one must allocate different-sized chunks of memory. Defining operators new and delete for a class but not new[] and delete[] accomplishes exactly this.

看来确实是这样。

论坛徽章:
0
发表于 2011-02-02 08:35 |显示全部楼层
回复  liwangli1983

的Reference里面找到的:www-d0.fnal.gov/~dladams/cxx_standard.pdf。

那啥,问 ...
幻の上帝 发表于 2011-02-01 22:49



    谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP