针对gcc编译器

C++内存分配和释放函数

//分配单个对象
operator new(std::size_t size) //分配数组对象
operator new[](std::size_t size)

这两个函数都有size参数,作为传入要分配空间的大小,内部实现完全一样。只不过在分配数组空间之前,会在前面的空间,填入数组空间的大小。下面我猜测的伪代码

new Object[int size]{
if(trival(Object析构函数)){
Object *ptr = operator new[](size * sizeof(Object));
for(int 0-> size){
构造函数(ptr);
}
return ptr;
}
//析构函数有用,
//需要析构的时候需要找到找到每个对象的this指针
//因此在返回地址的前(-8,-4)个字节保存对象的大小
else{
//比没有用户自定义的析构函数多8个字节
Object *ptr = operator new[](size * sizeof(Object) + 8);
*(int *)(ptr) = size;
return ptr + 8;
}
}

根据上面的分析,我们知道了只有析构函数有用(non-trival)的Object,operator new[]才回在前面保存分配的数组个数。

什么时候可以用delete替换delete []

  1. 内置类型
  2. 用户自定义类型,但是有non-trival析构函数

最新文章

  1. Spring 配置解析之Properties
  2. 吉他笔记 solo 和弦 推弦 音程
  3. windows自动修改ip的bat文件
  4. XListView刷新
  5. PB建数据窗口的时候会报内存错误
  6. chmod 命令——chmod 755与chmod 4755区别(转)
  7. C#隐藏桌面图标和任务栏
  8. J2EE
  9. 2013年全球IT公司市值排行榜
  10. 关于RequestDispatcher的原理
  11. mui 区域三级联动
  12. 201621123043 《Java程序设计》第3周学习总结
  13. 2018-2019-2 网络对抗技术 20165206 Exp3 免杀原理与实践
  14. 由AbstractQueuedSynchronizer和ReentrantLock来看模版方法模式
  15. docker 14 dockerfile自定义mycentos
  16. 1.5 socket服务器传输文件
  17. 2018.12.12 codeforces 935D. Fafa and Ancient Alphabet(概率dp)
  18. php正则字符串提取汉字
  19. POJ 2456 Aggressive cows(二分答案)
  20. Android实现不同Active页面间的跳转

热门文章

  1. OVS 总体架构、源码结构及数据流程全面解析
  2. 观未见,行不止 —— Power BI 两周年技术和方案交流圆桌会议纪实
  3. Learning to Rank算法介绍:GBRank
  4. mongodb 3.4 集群搭建:分片+副本集
  5. idea svn 的使用----转载,挺好的
  6. maven项目启动报:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener 错误解决方法-杜恩德
  7. java爬虫简单实现
  8. mongodb命令行基础语法
  9. lua的通用print函数
  10. 本地如何操作服务器的mysql,详细教程