1.malloc realloc calloc函数
malloc和realloc开辟空间 malloc只管开空间,calloc不但开空间还会进行初始化
realloc((1)当ptr==NULL时,realloc等价于malloc
(2)扩容
(3)重新开空间会释放旧的空间
2.new / delete 和operator new / operator delete和malloc / free的关系
(1)new / delete和malloc / free的区别
a、都是动态管理内存的入口
b、malloc/free只管动态的开空间释放空间,而new/delete不但会开空间释放空间,而且new会先开空间在调构造函数进行初始化,
delete会先调用析构函数清理工作,然后再释放空间
c、malloc / free需要手动计算类型大小,且返回值为void*
new / delete会自动进行类型大小的计算并返回相应类型的指针
(2)operator new / operator delete是malloc / free的一层封装,两者用法一样,只管开空间释放空间不会调用对象的构造/析构函数去初始化/清理对象
(3)a、c++是面向过程的语言,有错误不会返回错误码,而是抛异常 对于new来说,new不会直接调用malloc,因为malloc要是错误会返回错误码0,
不符合c++面向对象的机制,所以要通过调用operator new,出错就会抛异常
b、opertor new 和operator delete是c++的标准库函数,而不是操作符new / delete的重载
3.new[]时底层处理的机制
(1)new[]会多开四个字节,用来记录次数,指导调用多少次析构函数
(2)当编译器识别析构可调可不调时,比如把析构缺省时,就不会多开四个字节