为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
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;
}

打卡:

图片描述

图片描述

图片描述

课程评价

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

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

的问题,非常给力💪.

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
学生
手记
粉丝
7
获赞与收藏
1

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消