C语言–备忘
一、C 内存分配
1. 变量:
- 缺点:不能分配大量内存;[static, const, 动态,全局]
2. 数组:
- 数组:数据类型相同,可做到大量内存分配。
- 局部数组:访问范围有限。
- 全局数组:存在乱序访问,需要添加互斥保护,降低运行效率。
3. Struct:
- 可以数组成员来实现大量内存访问,同样存在数组缺陷;
- 做到分配大量内存,并且分配内存与数据类型无关。
4. malloc 和 free:
1. malloc 函数
- 功能:动态(随时随地)分配连续内存,必须使用free函数释放;
- 形参:size:指定要分配的内存大小,单位是字节 ;
- 返回值:返回分配的内存的首地址,注意做到强制类型转换;
如果分配失败,返回值NULL
#include <stdlib.h>
void *malloc(unsigned long size)
分配举例:
void *p=malloc(8);
if(NULL==p){
printf("分配内存失败");
return -1;
}else{
*(int *)(p+0)=2;
*(int *)(p+4)=3;
printf("%d %d",*(int *)(p+0),*(int *)(p+4));
}
2. free 函数
- 功能:释放内存;注意释放指针:p=NULL
- 形参:传递 malloc 分配的内存的首地址 p
#include <stdlib.h>
void free(void *p);
注意:不要让指针乱指
free (p);
p = NULL;
3. 举例使用:
#include <stdio.h>
typedef struct student{
char *name[30];
int age;
int weight;
}stu_t;
stu_t *get_stu_inform(void)
{
stu_t *stu1=(stu_t *)malloc(sizeof(stu_t));
if(NULL==stu1){
printf("分配失败");
return NULL;
}
memset(stu1,0,sizeof(stu_t));
strcpy(stu1->name,"yujinlong");
stu1->age=18;
stu1->weight=180;
return stu1;
}
int main(int argc,char *argv[])
{
stu_t *p=get_stu_inform();
if(NULL==p){
printf("分配失败");
return -1;
}
printf("%s %d %d",p->name,p->age,p->id);
free();
stu1=NULL;
return 0;
}
总结:
- 本节总结常见内存分配,C备忘结束。
|