随笔-0  评论-0  文章-24  trackbacks-0
      malloc是C/C++语言的标准库函数,new是C++运算符。它们都可以申请动态内存和释放内存。
      new自动计算需要分配的空间,而malloc需要手工计算字节数。
      new是类型安全的,而malloc不是。
      new调用constructor,而malloc不能。
      new operator由两步构成,分别是operator new和contruct。
      下面,讨论一下C++里面的new相关知识。
      有三种:
      第一种:new operator,也叫做new表达式;
      string* ps = new string("abc");
      它做了两件事情:申请内存和初始化对象。
      第二种:operator new,也叫做new操作符。
      void* buffer = operator new(sizeof(string));
      注意多了一个operator。
      第三种:placement new,是operator new重载的一个版本。它用于在给定的内存中初始化对象,也就是说你手中已有一块闲置的内存。
      void* buffer = new(buffer) string("abc");
      调用了placement new,在buffer所指向的内存中初始化string类型的对象,初始值是"abc"。
      那么,为什么要有placement new那?
      我们知道使用new操作符分配内存需要在堆中查找足够大的剩余空间,这个操作速度是很慢的,而且有可能出现无法分配内存的异常(空间不够)。 placement new就可以解决这个问题。我们构造对象都是在一个预先准备好了的内存缓冲区中进行,不需要查找内存,内存分配的时间是常数;而且不会出现在程序运行中途 出现内存不足的异常。所以,placement new非常适合那些对时间要求比较高,长时间运行不希望被打断的应用程序。
      
posted on 2012-10-26 13:55 zhuxin 阅读(110) 评论(0)  编辑 收藏 引用 所属分类: 面试题

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理