当前位置:首页 > 内存 > 正文

变量内存空间分析

  • 内存
  • 2024-06-12 06:50:10
  • 9124

一、C语言中全局变量、局部变量、函数参数个是在什么时候分配内存空间全局变量在主函数之前分配
局部变量在定义时分配,超出作用域后释放
静态局部变量仅分配一次,程序退出后释放
函数参数和局部变量变量基本相同:进入函数时分配,函数结束时释放
二、C语言中变量内存问题(1)函数中声明的变量是局部量。
(2)当函数没有被调用时,不会为本地量分配空间。此时没有占用内存空间。
(3)局部量子函数的生命周期是从调用开始到调用结束。
只有当函数被调用时,才会临时分配空间。当函数被调用并执行时,空间将被释放。
在调用和执行函数时,无论是否使用该变量,它都会占用内存空间并有一个​​地址。
(4)更准确地说,对于变量所在的域(即一对大括号之间的空间)来说,生命周期从进入该域开始,到退出该域结束。场。
三、变量的存储类型

我们经常在程序中定义多个变量来存储和处理数据。基本上,变量代表一块可以操作的内存,变量也可以被认为是内存的符号表示。当程序需要使用内存时,可以定义特定类型的变量。目前,编译器根据变量的数据类型分配一定大小的内存空间。程序可以通过变量名访问相应的内存。
如果变量的数据类型决定了对应的内存大小,那么存储类型就会影响对应内存的使用方式。被调用方法的用法特指在程序中何时何地可以使用变量,即变量的生命周期和作用域。
首先了解一些常识。1、程序运行时内存中可以存储变量的区域有3个:静态存储区、栈、堆栈。2、根据变量定义的位置,可以分为全局变量(函数体外部定义的变量)和局部变量(函数体内部定义的变量,包括形参)。
所有的全局变量和静态局部变量(定义时使用static关键字)都存储在静态存储区中,其点是:内存空间在编译时分配并初始化。程序运行时,该变量一直存在,直到程序终止,该变量对应的内存空间被释放。
所有非静态局部变量(也称为自动变量)都存储在堆栈中,该变量对应的内存空间被释放。换句话说,每次执行函数或模块时,局部变量都会被重新分配。如果定义变量时没有初始化,则变量中的值为随机数。
所有用malloc分配的内存(也叫动态内存)都在堆上,特点是动态分配的内存通常是通过指针来访问的。即动态内存可以通过free手动释放,也可以在程序结束时由系统自动释放。
上面讨论的是变量的生命周期,下面我们看看范围。作用域是指变量的可见作用域,是程序在其生命周期内可以使用该变量的部分。
全局变量的作用域从定义点开始,到源文件末尾结束。如果要在定义点之前使用全局变量,则需要使用extern关键字来扩展作用域。全局变量默认可以被其他文件引用。如果想将其使用限制在该文件内,则需要在定义时使用static关键字。
对于局部变量,无论是静态局部变量还是自动变量,其作用域都仅限于定义该变量的函数或模块。
只要知道动态内存地址,动态内存就可以在程序中的任何地方使用,只要它不被释放。
注意:在全局变量前添加static会影响作用域,在局部变量前添加static会影响生命周期。