课程名称:
物联网/嵌入式工程师
课程章节(阶段一第三周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));
内存的使用原则:
-
需要使用多少内存就分配多少内存,不要过多分配
-
使用完以后一定要free()。我们自己申请多少,就要手动释放多少,要不然可能会造成内存泄漏
-
死循环的时候,内存空间没有及时的释放掉,CPU一直占用内存空间
-
当一个程序在操作系统中运行结束后,它运行过程中分配的内存都会被释放掉。
完整的示例代码:
#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;
}
打卡:
课程评价
老师通过画图与代码相结合让我们很清楚代码在内存中的存储位置,更好地理解每个
函数的作用是什么,什么时候使用这个函数。同时在问答群中能够及时的解决我提出
的问题,非常给力💪.
點(diǎn)擊查看更多內(nèi)容
為 TA 點(diǎn)贊
評(píng)論
評(píng)論
共同學(xué)習(xí),寫(xiě)下你的評(píng)論
評(píng)論加載中...
作者其他優(yōu)質(zhì)文章
正在加載中
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦