C语言的内存管理

一、C语言的内存结构

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

二、分配内存

//分配内存
TYPE *p = (TYPE *)malloc(num*sizeof(TYPE));
memset(p, '\0', 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);

三、测试

#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("*****************************\n");
        printf("%s\n",p[i].name);
        printf("%d\n",p[i].age);
        person *pq;
        pq = &p[i];
        printf("%p\n",pq);
        printf("*****************************\n");
    }
    free(p);
    return 0;
}

a5ca68c4c6377241e0931addaa5d9bd0.png

相关文章
相关标签/搜索