1、malloc
void* malloc(std::size_t size);
分配size个字节的未初始化空间,分配成功会返回分配内存的第一个地址的指针;如果失败,则返回空指针。
- 头文件:<stdlib.h>或< cstdlib >
- 分配未初始化的空间
- 释放:
std::free()
std::realloc()
2、calloc
void* calloc(std::size_t num, std::size_t size);
为大小为size的num个对象分配内存,并将其初始化为0。 如果分配成功,返回一个指向第一个字节的指针。
- 头文件:<stdlib.h>或< cstdlib >
- 初始化 为 0;
- 释放:
std::free()
std::realloc()
3、补充
- malloc不会初始化,calloc会初始化
- 在某些操作系统中,malloc返回的指针只有在程序实际使用时才得到实际内存的支持。calloc会初始化为0,在使用calloc时就会有RAM(或交换)支持分配。
- malloc和calloc返回类型为“void *”,C编译器会隐式地将“void *”转换为需要的类型,但C++编译器不会 ,需要显示地转换。
举例: xx.c
#include <stdlib.h>
int main (void)
{
int *arr1, *arr2;
arr1 = malloc(3 * sizeof(int));
arr2 = calloc(3, sizeof(int));
arr1[0] = 0;
free(arr1);
free(arr2);
return 0;
}
xx.cpp
#include <cstdlib>
int main (void)
{
int *arr1, *arr2, *arr3;
arr1 = static_cast<int *> (malloc(3 * sizeof(int)));
arr2 = (int *)(malloc(3 * sizeof(int)));
arr3 = (int *)(calloc(3, sizeof(int)));
free(arr1);
free(arr2);
free(arr3);
return 0;
}
|