手记

【九月打卡】第1天【养成记】嵌入式挑战第1天 学习C语言中的堆区内存管理

课程名称:

物联网/嵌入式工程师

课程章节(阶段一第三周1-5):

C语言的堆区内存管理课程链接

老师:

大白老师

课程内容:

C语言编译的内存是如何分配的,如何申请并释放堆区内存

学习笔记:

用到的库是<stdlib.h>
申请堆内存的函数malloc(),示例

int *p = (int *)malloc(sizeof(int));

释放堆内存的函数free(),示例

free(p);
p = NULL;

把s所指向内存区域的前n个字节,全部置为c的函数void *memset(void *s, int c, size_t n);示例

int *addr = NULL
memset(addr,0,sizeof(sizeof(int) * 10));

内存的使用原则:

  1. 需要使用多少内存就分配多少内存,不要过多分配

  2. 使用完以后一定要free()。我们自己申请多少,就要手动释放多少,要不然可能会造成内存泄漏

  3. 死循环的时候,内存空间没有及时的释放掉,CPU一直占用内存空间

  4. 当一个程序在操作系统中运行结束后,它运行过程中分配的内存都会被释放掉。

完整的示例代码:

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

typedef struct{
  char name[20];
  int id;
  int score;
}s_t;

s_t *get_memeory_addr(){
  return (s_t *)malloc(sizeof(s_t));
}

void input_student(s_t *s){
  printf("please input name id score\n");
  gets(s->name);
  scanf("%d%d",&(s->id),&(s->score));
}

void output_student(s_t *s){
  printf("%s %d %d\n", s->name, s->id, s->score);
}

int main (int argc, char *argv[])
{
  s_t *s1 = get_memeory_addr();
  input_student(s1);
  output_student(s1);
  printf("未free前%p\n",s1);
  free(s1);
  printf("free后%p\n",s1);
  output_student(s1);
  s1 = NULL;
  printf("赋值NULL后%p\n",s1);
  return 0;
}

打卡:

课程评价

老师通过画图与代码相结合让我们很清楚代码在内存中的存储位置,更好地理解每个

函数的作用是什么,什么时候使用这个函数。同时在问答群中能够及时的解决我提出

的问题,非常给力💪.

0人推荐
随时随地看视频
慕课网APP