在C语言中学到了四个动态内存管理和函数,分别为malloc、calloc、realloc和free
函数原型为:void* malloc(size_t _size);
void free( void *memblock );
void *calloc( size_t num, size_t size );
void *realloc( void *memblock, size_t size );
1)malloc分配一块连续的内存空间,malloc返回的指针要进行检查,malloc需要手动计算类型的大小,malloc实际分配的内存可能比申请的空间要大一些
2)calloc也是分配一块连续的内存空间,但是calloc申请的空间全部被初始化为0
3)realloc用于调整一个原先已分配的内存空间的大小,返回的可能是新的地址,也可能是原先的内存空间的地址
4)free用来释放已申请的内存空间
在C++中动态开辟和释放空间采用的是new和delete操作符
new/delete 用于动态管理单个对象
new[]/delete[]用于动态管理对象数组
都是在堆上开辟空间
C++中还有几个标准库函数
如:void* operator new(size_t size) 这个函数不是new操作符的重载
在使用new操作符时,会先调用operator new()函数,而在此函数内部实质也是使用malloc来开辟空间
malloc/free和new/delete的区别和联系
1)它们都是动态管理内存的入口
2)malloc和free时C/C++标准库的函数,而new/delete是C++的操作符
3)malloc/free只是动态分配内存/释放空间,而new/delete除分配内存空间外还调用构造函数和析构函数进行初始化和清理工作
4)malloc/free需要手动计算类型的大小且返回值类型为void*,new/delete可自己计算类型的大小,返回值为对应类型的指针