C语言 关于内存动态分配问题

全局变量:分配到 内存的静态区。
局部变量(非静态):分配到 内存的动态区。在存储区中称为栈(stack)
临时数据(C允许内存动态分配区域):存放在自由空间区,称为堆区(heap)

内存动态分配 得益于四个库函数实现 (malloc calloc free realloc)
调用库函数 <stdlib.h>
void * 不指向任何数据,只提供地址。如未成功执行(内存空间不足),则返回空指针

1 malloc函数  // 动态存储区
void *malloc(unsigned int size)
作用:内存的动态区域 分配长度为size 的连续空间。
返回值 是分配区域的第一个字节地址,分配区域的开头为止。

maclloc(100)//分配100字节的临时分配域,函数值为第一个字节地址。
ps:貌似 是给 局部变量/临时数据 分配内存空间的?????


2 calloc函数  // 动态存储区
void *calloc(unsigned n,unsigned size)
作用:内存动态存储区中分配长度为size的连续空间,这个空间比较大,足够存个数组。

p = calloc(504)//开辟50*4个自己的临时分配域,把起始地址赋给指针变量p
ps:貌似 是给 局部变量/临时数据 分配内存空间 但是比较大额的?????

3 free函数
void free(void *p)  
作用:释放指针变量p所指向的动态空间,使者部分空间能够重用,注意是空间,没说“指针“
free(p)  //释放指针变量p 所指向的已分配的动态空间
ps:释放指针变量的方法。

4 realloc函数
void *relloc(void *p,unsigned int size)
如果通过mollie函数或是calloc 获取动态空间 想改变其大小,可以用recalloc函数重新分配。
realloc(p,50)  //重置指针变量p的动态存储空间为50字节。
ps:重置已经分配的指针变量的空间。

小结:四个库函数 
1/2 在动态存储区内 给变量分配存储空间(大小区别)
3 释放指针变量的存储空间
4 重置 指针变量的存储空间
原文地址:https://www.cnblogs.com/ly1973/p/5956978.html