malloc/calloc/relalloc/free函数

void *malloc(unsigned int num_bytes);不初始化内存

 

void *calloc(size_t n, size_t size);初始化内存

 

void *realloc(void *ptr, size_t new_Size)

用于对动态内存进行扩容(及已申请的动态空间不够使用,需要进行空间扩容操作),ptr为指向原来空间基址的指针, new_size为接下来需要扩充容量的大小。

失败返回NULL;成功返回新内存指针;

 

void free(void *ptr);

转载于:https://www.cnblogs.com/ramon-lee/p/10409679.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这些函数都是在C语言中用来动态分配内存的函数,它们的特点如下: 1. alloca函数:是一个非标准的函数,它分配内存的方式与malloc不同,它是在栈上分配内存,所以内存的生命周期是与函数的生命周期相同的。使用alloca分配的内存不需要手动释放,在函数返回时会自动释放。 2. malloc函数:是标准库函数,用于在堆上分配指定大小的内存。使用完成后需要手动释放,否则会导致内存泄漏。 3. calloc函数:也是标准库函数,用于在堆上分配指定大小的内存,并且将其初始化为0。使用完成后需要手动释放,否则会导致内存泄漏。 4. realloc函数:是标准库函数,用于重新分配已经分配的内存大小。如果之前分配的内存不足以满足新的内存需求,realloc会重新分配一块更大的内存,并将原有内存中的内容复制到新分配的内存中。使用完成后需要手动释放,否则会导致内存泄漏。 ### 回答2: alloca、malloc、calloc和relloca是在C语言中用于动态内存分配的函数。 alloca是C语言中的一个可变分配内存函数。它是在栈上分配内存的,用于动态地创建一个连续的内存块。它的特点是不需要手动释放内存,当函数返回时自动释放。但是,由于在栈上分配内存,它的内存分配和释放速度比较快,但分配的内存大小有限。 malloc是C语言中常用的动态内存分配函数。它在堆上分配内存,可以动态地创建任意大小的内存块。它的特点是需要手动释放内存,通过调用free函数来释放内存。由于在堆上分配内存,其分配和释放速度比较慢,但可以分配较大的内存空间。 calloc是C语言中另一个动态内存分配函数。它在堆上分配内存,并将分配的内存块清零。它的特点是需要手动释放内存,通过调用free函数来释放内存。与malloc相比,calloc适用于创建数组或矩阵等需要初始化的数据结构,因为可以保证分配的内存块全部为0。 relloca是一种特殊的动态内存分配函数,它在堆上重新分配内存。它的特点是可以增大或减小已分配内存块的大小。如果需要调整已分配内存块的大小,可以使用relloc函数,它会分配一个新的内存块,并将原有内存块的内容拷贝到新的内存块,然后释放原内存块。需要注意的是,使用realloc时需要特别小心,因为当无法满足大小调整时,它会返回NULL。 这些函数的特点不同,选择使用哪个函数取决于具体的需求和场景。 ### 回答3: alloca、malloc、calloc和realloc都是用于在内存中分配空间的函数: 1. alloca函数: alloca函数用于在栈上分配空间,该空间在函数调用结束后自动释放,不需要手动释放。它的特点如下: - alloca是计算栈帧大小的一部分,速度较快。 - 分配的内存空间是在栈上,所以不需要显式释放内存。 - 分配的内存空间是连续的,在函数调用结束后会被自动释放。 - 分配的内存空间大小限制较小。 2. malloc函数malloc函数用于在堆上分配指定大小的内存空间,并返回一个指向该内存空间的指针。它的特点如下: - 分配的内存空间是在堆上,需要手动释放。 - 分配的内存空间大小不受限制,可以根据需要动态调整。 - 由于需要维护堆的空闲内存链表,所以执行速度相对较慢。 3. calloc函数: calloc函数用于在堆上分配指定数量和大小的连续内存空间,并将其初始化为零。它的特点如下: - 分配的内存空间是在堆上,需要手动释放。 - 分配的内存空间大小不受限制,可以根据需要动态调整。 - 分配的内存空间会被初始化为零。 - 适用于需要分配并初始化一块连续内存空间的情况。 4. realloc函数: realloc函数用于重新分配已有内存块的大小,可以扩大或缩小。它的特点如下: - 分配的内存空间是在堆上,需要手动释放。 - 可以扩大或缩小已有内存块的大小。 - 如果重新分配的大小比原有大小大,会尝试在原有内存块后续位置进行扩展;如果重新分配的大小比原有大小小,会截断内存块。 - 可能导致内存拷贝或内存移动,效率较低。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值