C 内存


程序不会像处理堆那样在栈中显式地分配内存。当程序调用函数和声明局部变量时,系统将自动分配内存。
      栈是一个后进先出的压入弹出式的数据结构。在程序运行时,需要每次向栈中压入一个对象,然后栈指针向下移动一个位置。当系统从栈中弹出一个对象时,最晚进栈的对象将被弹出,然后栈指针向上移动一个位置。如果栈指针位于栈顶,则表示栈是空的;如果栈指针指向最下面的数据项的后一个位置,则表示栈为满的。其过程如图15.2所示。

 


在内存的全局存储空间中,用于程序动态分配和释放的内存块称为
自由存储空间,通常也称之为堆。 

 

malloc函数

void *malloc(unsigned int size);

在stdlib.h头文件中包含该函数,作用是在内存中动态地分配一块size大小的内存空间。malloc函数会返回一个指针,该指针指向分配的内存空间,如果出现错误,则返回NULL。
注意   

     使用malloc函数分配的内存空间是在堆中,而不是在栈中。因此在使用完这块内存之后一定要将其释放掉,释放内存空间使
用的是free函数(下面将会进行介绍)。

int *pInt;
pInt=(int*)malloc(sizeof(int));

 

calloc函数

void * calloc(unsigned n, unsigned size);

使用该函数也要包含头文件stdlib.h,其功能是在内存中动态分配n个长度为size的连续内存空间数组。calloc函数会返回一个指针,该指针指向动态分配的连续内存空间地址。当分配空间错误时,返回NULL。例如使用该函数分配一个整型数组内存空间:

int* pArray; /*定义指针*/

pArray=(int*)calloc(3,sizeof(int)); 

 

ralloc函数

void *realloc(void *ptr, size_t size);

首先使用该函数要包含头文件stdlib.h,其功能是改变ptr指针指向的空间大小为size大小。设定的size大小可以是任意的,也就是说既可以比原来的数值大,也可以比原来的数值小。返回值是一个指向新地址的指针,如果出现错误,则返回NULL。
例如改变一个分配的实型空间大小成为整型大小:
fDouble=(double*)malloc(sizeof(double));
iInt=realloc(fDouble,sizeof(int));

free函数

void *realloc(void *ptr, size_t size);

free函数的功能是使用由指针ptr指向的内存区,使部分内存区能被其他变量使用。ptr是最近一次调用calloc或malloc函数时返回的值。free函数无返回值。
例如释放一个分配整型变量的内存空间:
free(pInt);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值