亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

【九月打卡】第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
提交
取消