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

相關文章
相關標籤/搜索