C语言中变量的内存分配以及内存分配的类型详解

文章目录

  • 内存分配的类型
  • 变量的内存分配
  • 总结


内存分配的类型

C / C++中内存分为五个区:

  1. 栈区
  2. 堆区
  3. 全局/静态存储区
  4. 常量存储区
  5. 代码区

内存的分配有静态和动态之分:

  1. 静态内存分配:编译时分配。

    全局变量、静态全局变量、静态局部变量。

  2. 动态内存分配:运行时分配。

    局部变量、存放在程序员手动malloc出的堆区空间中的变量。


变量的内存分配

栈区 [stack]:编译器在需要的时候分配,不需要时自动清除的变量所在的储存区。

如函数执行时,函数的形参以及函数内的局部变量分配在栈区。
函数运行结束后,形参和局部变量去栈(自动释放)。
栈内存分配运算内置与处理器的指令集中,效率高但是分配的内存空间有限。

堆区 [heap]:由程序员手动分配释放的储存区。

如果程序员不释放这块内存,内存将一直被占用,直到程序运行结束由系统自动收回。
C语言中使用malloc free申请和释放空间。

静态储存区 [static]:初始化的全局变量静态变量存储在该区域。

全局变量静态变量的储存是放在一块的。
这块空间当程序运行结束后由系统释放。

常量储存区 [const]:常量字符串const修饰的全局变量储存在常量区。

"ABC"字符串就储存在常量区,储存在常量区的只读不可写。
const修饰的局部变量依然在栈上。

程序代码区:存放源程序的二进制代码。


总结

变量

变量 分配时机 内存区
局部变量 运行时 栈区
程序员手动malloc的堆区空间 运行时 堆区
全局变量 编译时 静态存储区
静态全局变量 编译时 静态存储区
静态局部变量 编译时 静态存储区

常量

常量 内存区
常量字符串 常量存储区
const修饰的全局变量 常量存储区
const修饰的局部变量 栈区

你可能感兴趣的:(嵌入式,内存,C++,c语言,开发语言)