① 变量的静态存储与动态存储
首先,静态存储与动态存储都是变量在内存中的存储方式。
C语言中变量分为局部变量(auto)、寄存器变量(register)、全局裤如变量(extern)、静态变量(static)。局部变量和寄存器变量在内存中以动态存储的方式存储,外部变量和静态变量在内存中以静态存储的方式存储。(笔者注:C语言不存在真正意义上的“全局变量”。被习埋纯搜惯性误称为“全局变量”的,一般是文件作用域对象。参考: 全局变量-维基网络 )
静态存储的变量存储在内存的静态区,在整个程序的生命周期内不被释放。动态存储的变量在程序执行的过程中才分配存储位置,使用完成后便被释放。
静态存储的变量如果在声明后没有被初始化,则系统会根据数据类型自动将其初始化为“0”或‘\0’。动态存储的变量如果在声明后没有被初始化,那么它的值是弯历不确定的。
② C语言中变量的存储类型有哪几种,存储方式哪几种谢喽
在C语言中,对变量的存储类型说明有以下四种:
1、auto 自动变量
2、register 寄存器变量
3、extern 外部变量
4、static 静态变量
所谓存储类型是指变量占用内存空间的方式,也称为存储方式。
变量的存储方式可分为“静态存储”和“动态存储”两种。
1、静态存储变量通常是在变量定义时就在存储单元并一直保持不变,直至整个程序结束。
2、动态存储变量是在程序执行过程中,使用它时才分配存储单元,使用完毕立即释放。典型的例子是函数的形式参数,在函数定义时并不给形参分配存储单元,只是在函数被调用时,才予以分配,调用函数完毕立即释放。
如果一个函数被多次调用,则反复地分配、释放形参变量的存储单元。从以上分析可知,静态存储变量是一直存在的,而动态存储变量则时而存在时而消失。
(2)全局动态存储什么意思扩展阅读:
变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域。
一、从作用域看:
1、全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包含全局变量的定义的源文件需要用extern关键字再次声明这个全局变量。
2、静态局部变量具有局部作用域,它只被初始化一次,自从第一次被初始化直到程序运行结束一直存在,它和全局变量的区别在于全局变量对所有函数都是可见的,而静态局部变量只对定义自己的函数体始终可见。
3、局部变量也只有局部作用域,它是自动对象(auto),它在程序运行期间不是一直存在,而是只在函数执行期间存在,函数的一次调用执行结束后,变量被撤销,其所占用的内存也被收回。
4、静态全局变量也具有全局作用域,它与全局变量的区别在于如果程序包含多个文件的话,它作用于定义它文件里,不能作用到其他文件里,即被static关键字修饰过的变量具有文件作用域。这样即使两个不同的源文件都定义了相同名字的静态全局变量,它们也是不同的变量。
二、从分配空间看:
全局变量,静态局部变量,静态全局变量都在静态存储区分配空间,而局部变量在栈里分配空间。
全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。
而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一个源程序的其他源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其他源文件中引起错误。
1、静态变量会放在程序的静态数据存储区(全局可见)中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。
2、变量用static告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。
参考资料来源:网络-变量-存储类型
③ [C语言] 动态存储区 和 动态分配内存 的区别。万分感谢!
(1)从变量的生存期分,有动态存储和静态存储两种,动态存储即在调用函数时临时分配单元,静态存储则是程序整个运行时间内都存在。动态存储:形式参数(本函数内有效); auto自动变量(本函数内有效);register寄存器变量(本函数有效)。静态存储: 静态局部变量(本函数内有效);静态外部变量(本文件中有效)。参考http://..com/question/128146638.html?fr=newQuestion
(2)C语言里malloc函数分配的空间属于动态存储区的范畴。正如上面提到的auto自动变量,通过malloc来分配空间的都是自动变量。在C++里明确分开了栈、和自由存储区。像自由变量里的局部变量(全局变量分配在“全局/静态存储区”)和函数都是存储在栈区。而通过malloc分配的空间在自由存储区。C语言没有分那么细,但是在动态存储区内还是分栈和堆的,也就是,由malloc分配的空间在堆区;非malloc分配的局部变量,函数等在栈区;全局变量与静态变量在静态存储区。
(3)区别在(2)里说的很清楚了,如果还有哪里不是很明白可以看一下参考资料。
最后,祝您成功!
④ C语言动态和静态存储类别的区别
主要区别在于存储区域和作用时间。
C语言的数据区分为静态存储区与动态存储区。
静态存储是指在程序运行期间给变量分配固定存储空间的方式。如全局变量存放在静态存储区中,程序运行时分配空间,程序运行完释放。
动态存储是指在程序运行时根据实际需要动态分配存储空间的方式。如形式参数存放在动态存储区中,在函数调用时分配空间,调用完成释放。
⑤ 静态存储分配和动态存储分配之间有什么不同 编译原理
动态存储方式
所谓动态存储方式是指在程序运行期间根据需要进行动态的分配存储空间的方式。动态存储变量是在程序执行过程中,使用它时才分配存储单元,
使用完毕立即释放。
典型的例子是函数的形式参数,在函数定义时并不给形参分配存储单元,只是在函数被调用时,才予以分配,
调用函数完毕立即释放。如果一个函数被多次调用,则反复地分配、
释放形参变量的存储单元。
静态存储方式
所谓静态存储方式是指在程序编译期间分配固定的存储空间的方式。该存储方式通常是在变量定义时就分定存储单元并一直保持不变,
直至整个程序结束。全局变量,静态变量等就属于此类存储方式。
总结
从以上分析可知,
静态存储变量是一直存在的,
而动态存储变量则时而存在时而消失。我们又把这种由于变量存储方式不同而产生的特性称变量的生存期。
生存期表示了变量存在的时间。
生存期和作用域是从时间和空间这两个不同的角度来描述变量的特性,这两者既有联系,又有区别。
一个变量究竟属于哪一种存储方式,
并不能仅从其作用域来判断,还应有明确的存储类型说明。
⑥ 在C语言中,什么是动态存储,什么是静态存储
动态存储是auto关键字,例如我们定义的int
a;
默认就是动态存储,具体应该是
auto
int
a;一般是用于函数参数,局部变量,超出作用域范围会失效,变量产生在动态存储区
静态存储时static关键字,例如,我们定义一个
static
int
a;
就是存储在静态存储区,相当于一个全局变量
一楼的理解出现了问题
⑦ 什么是静态存储区和动态存储区啊
1. 全局变量和静态数据放在静态存储区,生命周期为从申请到程序退出。因此局部变量若定义为static,则存储在静态存储区,否则存储在函数的栈内,生命周期为本函数内。
2 动态存储放自动变量和局部变量
⑧ 什么是动态存储什么时候用
存储器分为内存和外存
内存又分为静态存储和动态存储
动态存储就是指内存条(这只是我的个人意见)
当你的电脑运行时,硬盘中的信息就会传到内存条中,然后再传给CPU处理。也就是说当你的电脑打开后,你的动态存储器已经开始在用了。
举个例子:
硬盘就相当于冰箱,内存条就相当于切菜用的案板,CPU就相当于菜刀。要完成某向程序就如同:把材料从冰箱里拿出来,再放到案板上,用刀完成。你所说的那个动态存储就是案板,是临时存放你当前打开的程序的。
⑨ 静态存储器与动态存储器的定义是什么
静态存储器是指依靠双稳态触发器的两个稳定状态保存信息的存储器。双稳态电路是有源器件,需要电源才能工作,只要电源正常,就能长期稳定的保存信息,所以称为静态存储器。如果断电,信息将会丢失,属于挥发性存储器,或称易失性。
动态存储器是指在指定功能或应用软件之间共享的存储器。如果一个或两个应用软件占用了所有存储器空间,此时将无法为其他应用软件分配存储器空间。需要由存储器控制电路按一定周期对存储器刷新,才能维系数据保存。
(9)全局动态存储什么意思扩展阅读:
动态存储器的工作原理
动态RAM是由许多基本存储元按照行和列地址引脚复用来组成的。在3管动态RAM电路中,读选择线和写选择线是分开的,读数据线和写数据线也是分开的。
写操作时,写选择线为"1",Q1导通,要写入的数据通过Q1送到Q2的栅极,并通过栅极电容在一定时间内保持信息。
读操作时,先通过公用的预充电管Q4使读数据线上的分布电容CD充电,当读选择线为高电平有效时,Q3处于可导通的状态。若原来存有"1",则Q2导通,读数据线的分布电容CD通过Q3、Q2放电。此时读得的信息为"0",正好和原存信息相反。
可见,对这样的存储电路,读得的信息和原来存入的信息正好相反,所以要通过读出放大器进行反向再送往数据总线。