malloc calloc new 区别

来源:互联网 发布:ios11.2 软件打不开 编辑:程序博客网 时间:2024/05/18 03:13

1、函数的原型:

void *malloc(sizt_t size);

void *calloc(size_t numElements,size_t sizeOfElement);

2、函数的声明与头文件

#include <malloc.h>

void *malloc(int size);

3、函数的嗲用:

//功能:返回类型为 int* 类型(整数型指针),分配大小为 sizeof(int) * 10

int *p;

p=(int *)malloc(sizeof(int)*10);

p=(int *)calloc(10,size(int));

p=new int[10]; 

4、区别:

malloc分配的动态内存,不会初始化分配的内存空间,使用malloc需要初始化内存空间。否则,当分配的内存空间有历史值时,程序可能会出现问题。

colloc分配的动态内存,会初始化内存空间,如为整数型和字符型的元素分配内存将初始化为0,如果为指针类型的元素分配内存则初始化空指针。

5、补充:一次malloc的内存虚拟地址是连续的,物理地址不连续,连续多次malloc的内存之间不一定连续。ew是在堆上分配内存空间的,而操作系统用双向链表来维护堆空间,因此你一次new操作分配到的一块内存是连续的,而两次new操作分配到的两块内存可能就不在一起了

原创粉丝点击