Just a note
缺省版本的operator new在分配内存时,除了分配对象大小的内存外,还会额外分配一小块空间用来存放所分配内存的大小,这样 operator delete在释放内存时,才知道要释放内存的大小。所以当对象的size很小时(例如只有一个指针大小),连续使用缺省的operator new来分配内存,会浪费很多额外空间用来存放所分配内存的大小。因此我们可以通过重载operator new和operator delete来定义自己的内存分配方式,避免分配额外空间。内存池:通过一次申请比较大的内存空间,来避免小空间内存的频繁申请和释放,每次需要为对象分配内存空间时,在已经申请的大空间内分配。空闲区被按照对象大小划分为若干块,块与块之间通过链表组织起来。示例代码:
总结:1、new和delete的实现要配对。2、delete要考虑传入空指针的情况。3、new和delete需要考虑子类调用父类重载的operator的情况,这时需要释放的子类对象空间会比父类的大,应该调用全局operatoer。4、表示申请内存空间大小和指向空闲区的成员应声明为static,这样才不会占用对象的空间。5、使用union,当表示对象时,该union表示指向实现类对象的指针;否则,表示next指针,指向空闲区链表中的下一个空闲块。
Powered by: C++博客 Copyright © 大胖