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) 编辑 收藏 引用 所属分类:
面试题