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

变量在内存中的存储方式

  • 内存
  • 2024-05-12 23:17:23
  • 7387

一、C++局部变量的存储方式有哪几种静态存储方式和动态存储方式(具体为:自动、静态、寄存器寄存器、外部外部)
内存中的用户存储空间分为:程序区、静态存储区和动态存储区。
静态存储方式:程序执行过程中系统为变量分配的固定空间。
动态存储方式:程序执行过程中,系统为变量分配动态空间
1>使用static声明静态局部变量函数结束后局部变量的值不会丢失但保留了原来的值,即它所占用的存储单元没有被释放,当下次调用函数时,变量保留上一次函数调用结束时的值。静态局部变量的默认值为0。
2>动态局部变量当函数体被调用时,变量空间被释放。


二、C语言的各种数据在内存中如何存储?变量可以存储在内存中的不同位置,具体取决于它们的生命周期。函数外部定义的变量(全局变量或静态外部变量)和函数内部定义的静态变量的生命周期是程序的整个运行过程,这些变量都存储在数据段中。数据段是内存中为这些变量分配的固定大小的空间,它分为两部分,一部分用于存储已初始化的变量,另一部分用于存储未初始化的变量。函数内定义的自动变量(未使用static关键字定义的变量)的生命周期从程序开始执行其所在块的代码时开始,到程序离开该块时结束。作为函数参数的变量仅在函数调用期间存在。这些变量存储在堆栈中。堆栈是内存中的一个区域,一开始很小,然后自动增长,直到达到预定的限制。


三、C语言中变量的存储类型有哪几种,存储方式哪几种?谢喽

在C语言中,变量存储类型描述有四种:

1.自动变量

2.注册变量寄存器。

3.外部外部变量

静态变量

所谓存储类型是指变量占用内存空间的方式,也称为存储方式。

变量的存储方式可以分为“静态存储”和“动态存储”两种。

1.静态存储变量通常在定义变量时就在存储单元中找到,并且直到整个程序结束都保持不变。

2.动态存储变量在程序执行过程中使用时分配存储单元,使用后立即释放。一个典型的例子是函数的形式参数。定义函数时,不会为形参分配存储空间。仅在调用函数时分配,调用函数后立即释放。

如果一个函数被多次调用,形参变量的存储单元就会被重复分配和释放。从上面的分析可以看出,静态存储变量一直存在,而动态存储变量有时存在,有时消失。

扩展信息:

变量有不同的作用域,作用域根据定义位置的不同生命周期分为6种类型:全局作用域、局部作用域、语句作用域、类作用域、命名空间作用域和文件作用域。

1.从范围角度来看:

1.全局变量只需在一个源文件中定义即可应用于所有源文件。当然,其他不包含全局变量定义的源文件必须使用extern关键字重新声明这个全局变量。

2.静态局部变量具有局部作用域。它们只初始化一次,从第一次初始化开始一直存在,直到程序结束。它们与全局变量之间的区别在于,全局变量可用于所有函数,而静态局部变量始终仅对定义它们的函数体可见。

3.局部变量也有局部作用域。它们是自动物体(汽车)。它们并不总是在程序执行过程中存在,而只在函数执行过程中存在,变量被撤销,其占用的内存也被回收。

4.静态全局变量也具有全局作用域。它们与全局变量的区别在于,如果程序包含多个文件,则作用于定义它的文件,不能作用于其他文件。也就是说,用static关键字修改的变量是文件作用域的。这样,即使两个不同的源文件定义了同名的静态全局变量,它们也是不同的变量。

2.从分配空间来看:

全局变量、静态局部变量、静态全局变量都在静态存储区分配空间,而局部变量在栈上分配空间。

全局变量本身就是静态存储方式,静态全局变量显然也是静态存储方式。两者的存储方式没有区别。两者的区别在于,非静态全局变量的作用范围是整个源程序。当源程序由多个源文件组成时,非静态全局变量在每个源文件中都有效。

静态全局变量是有作用域限制的,这意味着它们只在定义该变量的源文件中有效,不能在同一源程序的其他源文件中使用。由于静态全局变量的作用域仅限于一个源文件,并且只能被该源文件中的函数共享,因此可以避免其他源文件中的错误。

1.静态变量会被放置在程序的(全局可见的)静态数据存储区域中,以便下次调用时可以保留原来的赋值。这就是它与堆栈变量和堆变量的区别。

2.变量使static来告诉编译器它们仅在变量的范围内可见。这就是它与全局变量的区别。

参考来源:-变量-存储类型