操作系统:ubuntu10.04
前言:
在开发中,很多时候需要动态分配内存,这就需要使用到c标准库中的各个内存分配函数了。下面来讲解一下这些函数的使用方法,相互间的异同。
一,alloc
头文件:#include
函数定义:void *alloca(size_t size);
函数说明:alloca() 用来配置 size 个字节的内存空间,然而和 malloc、colloc 不同的是,
alloca() 是从 栈空间(stack) 中分配内存的,因此在函数返回时会自动释放此空间。
返回值:内存分配成功则返回首地址,失败则返回 NULL
二,calloc
头文件:#include
函数定义:void *calloc(size_t num, size_t size);
函数说明:calloc() 用来分配 num 个相邻的内存单位,每个内存单位的大小为size,并返回指向
第一个单位的首地址的指针。这个和使用下列的方式效果相同:malloc(num * size);
不过,在使用 calloc() 分配的内存时,会将内存内容初始化为0.
返回值:内存分配成功则返回第一个单位的首地址,失败则返回 NULL。
三,malloc
头文件:#include
函数定义:void *malloc(size_t size);
函数说明:malloc() 用来从堆中(heap)分配内存空间,其大小为 size。
返回值:分配成功则返回首地址,失败则返回 NULL。
四,realloc
头文件:#include
函数定义:void *realloc(void *ptr, size_t size);
函数说明:参数 ptr 为指向先前由 malloc、calloc、realloc 所返回的内存指针,而参数 size 为
新分配的内存大小,其值可比原内存大或小。若 size 值比原分配的内存空间小,内
存内容不会改变,且返回的指针为原来内存的首地址(即ptr);若 size 值比原分配
的内存空间大,则 realloc 不一定会返回原来的指针,原先的内容不会改变,但新多
出的内存则为设初始值。如果 ptr 为 NULL,则相当于 malloc(size);如果 size 为 0,
则相当于 free(ptr)。
返回值:内存分配成功则返回首地址,失败则返回 NULL。
五,实例
-
#include <stdio.h>
-
#include <stdlib.h>
-
-
-
int global_init_var = 84; //已初始化的全局变量
-
int global_uninit_var; //未初始化的全局变量
-
char *str1 = "hello world!"; //字符串常量
-
-
void func1(int i)
-
{
-
printf("%d\n", i);
-
}
-
-
int main(void)
-
{
-
static int static_var = 85; //已初始化的静态局部变量
-
static int static_var2; //未初始化的静态局部变量
-
char *str2 = "22222"; //字符串常量
-
-
int a = 1;
-
int b;
-
-
char *ptr_stack = NULL;
-
char *ptr_heap = NULL;
-
-
ptr_stack = alloca(100);
-
printf("ptr_stack : %p\n",ptr_stack);
-
printf("a : %p\n",&a);
-
printf("b : %p\n",&b);
-
-
ptr_heap = malloc(100);
-
printf("ptr_heap : %p\n",ptr_heap);
-
free(ptr_heap);
-
-
printf("static_var : %p\n",&static_var);
-
printf("global_init_var : %p\n",&global_init_var);
-
printf("global_uninit_var : %p\n",&global_uninit_var);
-
printf("static_var2 : %p\n",&static_var2);
-
printf("str2 : %p\n",str2);
-
printf("str1 : %p\n",str1);
-
-
-
func1(static_var+static_var2+a+b);
-
-
return a;
运行结果:
六,参考文件
1,《Linux C函数库参考手册》
阅读(917) | 评论(0) | 转发(0) |