首页 > 系统相关 >【C内存模型】static 变量在内存中的位置

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

时间:2022-12-09 23:22:06浏览次数:63  
标签:初始化 函数 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

标签:初始化,函数,static,内存,全局变量,变量
From: https://www.cnblogs.com/studentWangqy/p/16970526.html

相关文章

  • 1. 变量
    变量1.变量概述1.1什么是变量白话:变量就是一个装东西的盒子通俗:变量是用于存放数据的容器,我们通过变量名获取数据,甚至数据可以修改1.2变量在内存中的存储本质:变量是......
  • 2. 变量的数据类型:基本数据类型和引用数据类型
    数据分类数据分为:静态数据、动态数据。静态数据静态数据是指一些永久性的数据。一般是以文件的形式存储在硬盘上,比如文档、照片、视频等文件。电脑关闭后,静态数据仍然......
  • 03-JavaHome&临时环境变量&classpath环境变量
    1.配置java_home、临时环境变量信息PATH环境信息:D:;D:\JDK\JDK\bin;D:\eclipse4.3\adt-bundle-windows-x86-20131030\adt-bundle-windows-x86-20131030\sdk\platform-t......
  • C#通过不安全代码看内存加载
    (注:本篇用点长,有点绕,耐心浏览)C#中类型分为值类型和引用类型,值类型存储在堆栈中,是栈结构,先进后出,引用类型存储在托管堆中。接下来用不安全代码的地址,来看一下值类型和引......
  • Docker-compose限制内存大小
    version:'3.7'services:openldap:image:10.10.xxx.54/public/openldap:1.3.0container_name:openldapenvironment:-N9E_NID=22ports:......
  • [译]Android防止内存的八种方法(下)
    在上一篇​​Android内存泄漏的八种可能(上)​​中,我们讨论了八种容易发生内存泄漏的代码。其中,尤其严重的是泄漏​​Activity​​对象,因为它占用了大量系统内存。不管内存泄......
  • [译]Android内存泄漏的八种可能(上)
    ​​原文EightWaysYourAndroidAppCanLeakMemor​​Java是垃圾回收语言的一种,其优点是开发者无需特意管理内存分配,降低了应用由于局部故障(segmentationfault)导致......
  • vscode 在debug模式给被调试程序传递环境变量
      https://blog.csdn.net/jinxiaonian11/article/details/127965187 C/C++"environment":[{"name":"ENV_TEST","value":"1"},{"name":"T......
  • JavaScript:变量: 如何声明变量?
    声明变量可以用下面几种方式:但是这几种声明方式肯定是有区别的,主要是上面三种方式的区别,这需要结合window对象和作用域来说明,这里不赘述。声明变量的时候,推荐使用let,这......
  • JavaScript:变量:声明和赋值变量时,内存结构是什么样的?
    这里只是大概画出内存结构的模型图,方便理解当我们声明变量和赋值变量时,到底在干嘛。如上图所示,a赋值一个对象{},b赋值字符串hello;于是内存里划了三个区域给我们,一个存储......