Chinaunix首页 | 论坛 | 博客
  • 博客访问: 242885
  • 博文数量: 253
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 3
  • 用 户 组: 普通用户
  • 注册时间: 2014-09-21 12:29
文章分类

全部博文(253)

文章存档

2014年(253)

我的朋友

分类: C/C++

2014-09-21 12:53:21

操作系统: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。


五,实例

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <stdlib.h>


  3. int global_init_var = 84; //已初始化的全局变量
  4. int global_uninit_var; //未初始化的全局变量
  5. char *str1 = "hello world!"; //字符串常量

  6. void func1(int i)
  7. {
  8.     printf("%d\n", i);
  9. }

  10. int main(void)
  11. {
  12.     static int static_var = 85; //已初始化的静态局部变量
  13.     static int static_var2; //未初始化的静态局部变量
  14.     char *str2 = "22222"; //字符串常量

  15.     int a = 1;
  16.     int b;

  17.     char *ptr_stack = NULL;
  18.     char *ptr_heap    = NULL;

  19.     ptr_stack = alloca(100);
  20.     printf("ptr_stack : %p\n",ptr_stack);
  21.     printf("a : %p\n",&a);
  22.     printf("b : %p\n",&b);

  23.     ptr_heap = malloc(100);
  24.     printf("ptr_heap : %p\n",ptr_heap);
  25.     free(ptr_heap);

  26.     printf("static_var : %p\n",&static_var);    
  27.     printf("global_init_var : %p\n",&global_init_var);    
  28.     printf("global_uninit_var : %p\n",&global_uninit_var);
  29.     printf("static_var2 : %p\n",&static_var2);
  30.     printf("str2 : %p\n",str2);
  31.     printf("str1 : %p\n",str1);
  32.     
  33.     
  34.     func1(static_var+static_var2+a+b);

  35.     return a;

    运行结果:
    


六,参考文件
1,《Linux C函数库参考手册》



阅读(418) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~