C语言的内存管理

1、C语言的内存结构

内存地址位置 程序存储区域 子区域
高地址 命令行参数区(命令行参数&环境变量)
向下增长 栈区(内存空间有限,无需申请释放),存放局部变量
向上增长 堆区(内存空间大,需要申请释放)
... 数据区 未初始化变量区(全局、静态)
... 数据区 已初始化变两区(全局、静态)
... 数据区 字符串常量区
低地址 代码区 字符串常量区

2、分配内存

//分配内存
TYPE *p = (TYPE *)malloc(num*sizeof(TYPE));
memset(p, '', num*sizeof(TYPE));
//分配内存(默认填充0)
TYPE *p_array = (TYPE *)calloc(num, sizeof(TYPE));
//调整内存分配
TYPE *p1 = (TYPE *)malloc(num*sizeof(TYPE));
TYPE *p2 = realloc(p1, 2*num*sizeof(TYPE));
//释放内存
free(p);

3、测试

#include <stdio.h>
#include <memory.h>
#include <string.h>
#include <stdlib.h>

typedef struct Person{
	char name[20];
	int age;
}person;

int main(void){
	person *p = (person *)malloc(10*sizeof(person));
	memset(p, 0, 10*sizeof(person));
	for (int i=0; i<10; i++){
		strcpy(p[i].name,"Tom");
		p[i].age = i+100;
	}
	for (int i=0; i<10; i++){
		printf("*****************************
");
		printf("%s
",p[i].name);
		printf("%d
",p[i].age);
		person *pq;
		pq = &p[i];
		printf("%p
",pq);
		printf("*****************************
");
	}
	free(p);
	return 0;
}

a5ca68c4c6377241e0931addaa5d9bd0.png

原文地址:https://www.cnblogs.com/KevinGeorge/p/11059319.html