【C内存模型】static 变量在内存中的位置

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

posted @ 2022-12-09 23:18  lucky_doog  阅读(633)  评论(0编辑  收藏  举报