C内存模型
简单才是真理,所以我在参考了来自 https://blog.csdn.net/second60/article/details/79946310 的图后自己画了一个图
栈:函数参数、函数内部创建的临时变量都存放在这里
堆:程序运行过程中动态分配的空间
BBS 段:用于存储没有被初始化的全局变量,可读性
Data 段:存储已经初始化的常量数据,只读
Text 段:存储的是代码本身,只读
栈
当调用一个函数时,系统会自动为参数当局部变量,push 进栈中,当函数调用结束时,会自动提升栈。
(可查看汇编中的函数调用机制)
栈的空间是有限的,因此不要在函数里创建太大的数组。
linux 查看栈的大小
ulimit -s
static 变量或函数
1.限制变量或函数的作用域
static修饰全局变量或者的时候,将函数和变量的作用域限定与源文件,其他文件不能访问函数和变量,即便是extern外部声明也调用不了。增加数据的安全性。
与普通全局变量的区别
可以使用
gcc xx.c -S
查看汇编代码
会看到 static 类型是 .local 的
普通全局变量的类型是 .global 的
2.定义变量的生命周期。
static变量存储在 data 或 bss 段(视其是否在定义时被初始化),变量在程序的整个运行过程中不会被销毁。
bss段和 data 段的区别
bss段(未初始化的数据)并不给该段的数据分配空间,只是记录数据所需空间的大小;
data段 会给该段的数据分配空间
版权声明:本文为CSDN博主「P_xiaojia」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/P_xiaojia/article/details/82781450