c语言的内存分配,c语言的内存分配方式有哪些

kodinid 17 0

大家好,今天小编关注到一个比较意思的话题,就是关于c语言内存分配问题,于是小编就整理了2个相关介绍c语言的内存分配的解答,让我们一起看看吧。

  1. C语言中有哪些存储类型?
  2. C语言的各种数据在内存中如何存储?

C语言中有哪些存储类型

在C语言中,对变量的存储类型说明有以下四种:

1、auto 自动变量

c语言的内存分配,c语言的内存分配方式有哪些-第1张图片-安济编程网
图片来源网络,侵删)

2、register 寄存器变量

3、extern 外部变量

4、static 静态变量 所谓存储类型是指变量占用内存空间的方式,也称为存储方式。 变量的存储方式可分为“静态存储”和“动态存储”两种。 1、静态存储变量通常是在变量定义时就在存储单元并一直保持不变,直至整个程序结束。 2、动态存储变量是在程序执行过程中,使用它时才分配存储单元,使用完毕立即释放。典型的例子是函数的形式参数,在函数定义时并不给形参分配存储单元,只是在函数被调用时,才予以分配,调用函数完毕立即释放。 一个函数被多次调用,则反复地分配、释放形参变量的存储单元。从以上分析可知,静态存储变量是一直存在的,而动态存储变量则时而存在时而消失。

c语言的内存分配,c语言的内存分配方式有哪些-第2张图片-安济编程网
(图片来源网络,侵删)

在C语言中,对变量的存储类型说明有以下四种:

1、auto 自动变量

2、register 寄存器变量

c语言的内存分配,c语言的内存分配方式有哪些-第3张图片-安济编程网
(图片来源网络,侵删)

3、extern 外部变量

4、static 静态变量 所谓存储类型是指变量占用内存空间的方式,也称为存储方式。 变量的存储方式可分为“静态存储”和“动态存储”两种。 1、静态存储变量通常是在变量定义时就在存储单元并一直保持不变,直至整个程序结束。 2、动态存储变量是在程序执行过程中,使用它时才分配存储单元,使用完毕立即释放。典型的例子是函数的形式参数,在函数定义时并不给形参分配存储单元,只是在函数被调用时,才予以分配,调用函数完毕立即释放。 如果一个函数被多次调用,则反复地分配、释放形参变量的存储单元。从以上分析可知,静态存储变量是一直存在的,而动态存储变量则时而存在时而消失。

  c语言中的存储类型有auto, extern, register, static 这四种,存储类型说明了该变量要在进程的哪一个段中分配内存空间,可以为变量分配内存存储空间的有数据区、BBS区、栈区、堆区。

  1. auto存储类型

  auto只能用来标识局部变量的存储类型,对于局部变量,auto是默认的存储类型,不需要显示的指定。因此,auto标识的变量存储在栈区中。

  2. extern存储类型

  extern用来声明在当前文件引用在当前项目中的其它文件中定义的全局变量。如果全局变量未被初始化,那么将被存在BBS区中,且在编译时,自动将其值赋值为0,如果已经被初始化,那么就被存在数据区中。全局变量,不管是否被初始化,其生命周期都是整个程序运行过程中,为了节省内存空间,在当前文件中使用extern来声明其它文件中定义的全局变量时,就不会再为其分配内存空间。

  3. register存储类型

  声明为register的变量在由内存调入到CPU寄存器后,则常驻在CPU的寄存器中,因此访问register变量将在很大程度上提高效率,因为省去了变量由内存调入到寄存器过程中的好几个指令周期。

C语言的各种数据在内存中如何存储?

变量可以存储在内存中的不同地方,这依赖于它们的生存期。在函数外部定义的变量(全局变量或静态外部变量)和在函数内部定义的static变量,其生存期就是程序运行的全过程,这些变量被存储在数据段(datasegment)中。数据段是在内存中为这些变量留出的一段大小固定的空间,它分为两部分,一部分用来存放初始化变量,另一部分用来存放未初始化变量。 在函数内部定义的auto变量(没有用static定义的变量)的生存期从程序开始执行其所在的程序块代码时开始,到程序离开该程序块时为止。作为函数参数的变量只在调用该函数期间存在。这些变量被存储在栈(stack)中。栈是内存中的一段空间,开始很小,以后逐渐自动增大,直到达到某个预定义的界限。

到此,以上就是小编对于c语言的内存分配的问题就介绍到这了,希望介绍关于c语言的内存分配的2点解答对大家有用。

标签: 变量 存储 函数