拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

C语言进阶5

C语言进阶5

1. 内存基础概念

1.1 内存分布图

static 局部变量不初始化放在BBS段,反之DATA段

BSS:Block Started by Symbol

中文:以符号起始的块

只读数据段一般放字符串常量

在stm32中:

  1. .text 代码段:程序代码、常量字符串 →存 Flash
  2. .rodata 只读常量:const int a=10;→存 Flash
  3. .data 已初始化全局 / 静态变量:int g_var=100;
    • 原始数据:Flash
    • 上电启动时,拷贝到 RAM运行
  4. .bss 未初始化全局 / 静态变量:int g_var;→RAM,上电自动清零
  5. 栈 (stack):局部变量、函数入参、返回地址 →RAM
  6. 堆 (heap):malloc动态申请内存 →RAM

1.2 堆空间

使用malloc和free来分配和释放

注意:不是100%能分配成功的

1.3 栈空间

栈空间实际上是函数内部局部变量分配的一些内存,函数结束就销毁

堆和栈的生长方向看箭头

1.3 内存越界

尽量不使用strcpy使用strncpy,减少内存越界,堆和栈中都可能出现内存越界

2. 指针

2.1 空指针和野指针

free后把指针变量置空,减少野指针

3. 注意

char *arr[3];

遵循先右后左原则,首先看变量名右边确定是数组,再看左边星号确定是指针

返回列表