
1. 内存基础概念1.1 内存分布图static 局部变量不初始化放在BBS段反之DATA段BSSBlock Started by Symbol中文以符号起始的块只读数据段一般放字符串常量在stm32中.text 代码段程序代码、常量字符串 →存 Flash.rodata 只读常量const int a10;→存 Flash.data 已初始化全局 / 静态变量int g_var100;原始数据Flash上电启动时拷贝到 RAM运行.bss 未初始化全局 / 静态变量int g_var;→RAM上电自动清零栈 (stack)局部变量、函数入参、返回地址 →RAM堆 (heap)malloc动态申请内存 →RAM1.2 堆空间使用malloc和free来分配和释放注意:不是100%能分配成功的1.3 栈空间栈空间实际上是函数内部局部变量分配的一些内存,函数结束就销毁堆和栈的生长方向看箭头1.3 内存越界尽量不使用strcpy使用strncpy减少内存越界堆和栈中都可能出现内存越界2. 指针2.1 空指针和野指针free后把指针变量置空减少野指针3. 注意char *arr[3];遵循先右后左原则首先看变量名右边确定是数组再看左边星号确定是指针