笔记内容参考RT-Thread内核入门指南教程视频:https://www.bilibili.com/video/av79513262?p=2
在单片机应用中,人们常提及堆栈一词,实际上堆和栈是两个不同概念。栈(stack):由编译器自动分配释放。堆(heap):一般由程序员分配和释放。
1 |
int a=0; //全局初始化区 char *p1; //全局未初始化区 main() { int b; //栈 char s[]=“abc”; //栈 char *p2; //栈 char *p3=“123456”; //123456\0在常量区,p3在栈上。 static int c=0; //全局(静态)初始化区 p1=(char *)malloc(10); //堆 p2=(char *)malloc(20); //堆 } |
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
第5~8行为局部变量,变量声明后系统自动分配内存空间。当程序执行结束,系统自动释放这些内存空间。第10~11行,编程者使用函数malloc()向内存空间申请了10的内存空间。程序执行后,系统无法自动释放该空间,需要编程者使用函数free()释放这些内存空间。因此,malloc()函数与free()函数总是成对出现。若编程者不使用free()函数释放申请回来的内存空间,则容易造成内存泄漏。
malloc()常规用法如下
char *p; p=(char *)malloc(10); free(p); |
文章评论(0条评论)
登录后参与讨论