变量在内存中的存储的存储类型有哪些

Linux C笔记之 变量存储类型 详解 - 小世界追着大梦想 - 博客园
存储类型:& &&& &变量的存储类型是指存储变量值的内存类型 ;& &&& & 变量的存储类型决定变量何时创建、何时销毁以及它的值将保存多久&;& & & & 存储变量:普通内存、运行时堆栈、硬件寄存器;& & & & 变量的缺省存储类型取决于它的声明位置;& & & & 静态(static)变量:& &&& &在代码块之外声明的变量,存储于静态内存中,也就是不属于堆栈的内存。& &&& &静态变量,无法为它指定其他存储类型。它在程序运行之前创建,在程序的整个执行期间始终存在。它始终保持原先的值,除非给他赋一个不同的值或者程序结束。& & & &&自动(automatic)变量:& & & & 在代码块内部声明的变量的缺省存储类型,存储于堆栈中。& & & & 关键字 auto 用于修饰这种存储类型,但极少使用。& & & & 在程序执行到声明自动变量的代码块时,自动变量才被创建,当程序的执行流离开该代码块时,这些自动变量便自行销毁。如果该代码块被反复调用,这些自动变量每次都将重新创建。在代码块再次执行时,这些自动变量在堆栈中所占据的内存位置有可能和原先的位置相同,也有可能不同。即使它们所占据的位置相同,你也不能保证这块内存同时不会有其他的用途。因此,我们可以说自动变量在代码块执行完毕后就消失,当代码块再次执行时,它们的值一般并不是上次执行的值。& &&& &&如果给声明在代码块内部的变量加上 static ,可以使它的存储类型从自动变为静态。具有静态存储类型的变量在整个程序执行过程中一直存在,而不仅仅在声明它的代码块执行时存在。注意:&修改变量的存储类型并不表示修改该变量的作用域,它仍然只能在该代码块内部按名字访问。函数的形式参数不能声明为静态,因为实参总是在堆栈中传递参数,用于支持递归。& &&& &&寄存器(register)变量:& &&& &&存储于机器的硬件寄存器而不是内存中。& &&& &&寄存器变量比存储于内存的变量访问起来效率更高。但是,编译器不一定 “关注” register 关键字,如果有太多的变量被声明为 register ,它只选取前几个实际存储于寄存器中,其余的就按普通自动变量处理。:& & & & 在典型情况下,你当然希望把使用频率最高的那些变量声明为寄存器变量。在有些计算机中,如果把指针声明为寄存器变量,程序的效率将能得到提高,尤其是那些频繁执行间接访问操作的指针。你可以把函数的形参声明为寄存器变量,编译器会在函数的起始位置生成指令,把这些值从堆栈中复制到寄存器中。但是,有可能,这个优化措施所节省的时间和空间的开销还抵不上复制这几个值所用的开销。& & & & 寄存器变量的创建和销毁时间和自动变量相同,但它需要一些额外的工作,在一个使用寄存器变量的函数返回之前,这些寄存器先前存储的值必须恢复,确保调用者的寄存器变量未被破坏。许多机器使用运行时堆栈来完成这个任务。当函数开始执行时,它把需要使用的所有寄存器的内容都保存到堆栈中,当函数返回时,这些值再复制会寄存器中。& & & & 在许多机器的硬件实现中,并不为寄存器变量指定地址。同样,由于寄存器值的保存和恢复,某个特定的寄存器在不同的时刻所保存的值不一定相同。所以,机器并不像你提供寄存器变量的地址。&变量的存储类型有哪些_百度知道
变量的存储类型有哪些
我有更好的答案
Turbo C2.0支持四种变量存储类型。说明符如下:auto
register 下面分别来介绍。 一、auto auto称为自动变量。局部变量是指在函数内部说明的变量(有时也称为自动变量)。用关键字auto进 行说明, 当auto省略时, 所有的非全程变量都被认为是局部变量, 所以auto实际上 从来不用。局部变量在函数调用时自动产生, 但不会自动初始化, 随函数调用的结束, 这 个变量也就自动消失了, 下次调用此函数时再自动产生, 还要再赋值, 退出时又自 动消失。 二、staticstatic称为静态变量。根据变量的类型可以分为静态局部变量和静态全程变量。1. 静态局部变量它与局部变量的区别在于: 在函数退出时, 这个变量始终存在, 但不能被其它 函数使用, 当再次进入该函数时, 将保存上次的结果。其它与局部变量一样。2. 静态全程变量Turbo C2.0允许将大型程序分成若干独立模块文件分别编译, 然后将所有模块 的目标文件连接在一起, 从而提高编译速度, 同时也便于软件的管理和维护。静态 全程变量就是指只在定义它的源文件中可见而在其它源文件中不可见的变量。它与 全程变量的区别是: 全程变量可以再说明为外部变量(extern), 被其它源文件使用, 而静态全程变量却不能再被说明为外部的, 即只能被所在的源文件使用。 三、externextern称为外部变量。为了使变量除了在定义它的源文件中可以使用外, 还要 被其它文件使用。因此,
必须将全程变量通知每一个程序模块文件,
此时可用 extern来说明。 四、registerregister称为寄存器变量。它只能用于整型和字符型变量。定义符register说 明的变量被Turbo C2.0存储在CPU的寄存器中,
而不是象普通的变量那样存储在内 存中, 这样可以提高运算速度。但是Turbo C2.0只允许同时定义两个寄存器变量, 一旦超过两个, 编译程序会自动地将超过限制数目的寄存器变量当作非寄存器变量 来处理。因此, 寄存器变量常用在同一变量名频繁出现的地方。另外, 寄存器变量只适用于局部变量和函数的形式参数, 它属于auto型变量, 因此, 不能用作全程变量。定义一个整型寄存器变量可写成:对于以上所介绍的变量类型和变量存储类型将会在以后的学习中, 通过例行程 序中的定义、使用来逐渐加深理解。
采纳率:100%
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。博主最新文章
博主热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)已解决问题
简单类型变量和引用类型变量存储机制是什么?请生意经的朋友帮忙解答
浏览次数:222
用手机阿里扫一扫
最满意答案
简单类型变量是直接在栈内存中开辟存储空间存储变量值。引用类型变量是由引用空间和存储空间两部分构成,引用空间在栈内存中,存储空间在堆内存中,存储空间负责存储变量值,引用空间负责存放存储空间的首地址。引用变量中存放的是地址值,通过地址值可以定义存储位置并修改存储信息。当变量与变量之间赋值时,引用类型变量和简单变量都属于值传递,不同的是简单变量传递的是内容本身,而引用变量传递的却是引用地址。
答案创立者
以企业身份回答&
正在进行的活动
生意经不允许发广告,违者直接删除
复制问题或回答,一经发现,拉黑7天
快速解决你的电商难题
店铺优化排查提升2倍流量
擅长&nbsp 店铺优化
您可能有同感的问题
扫一扫用手机阿里看生意经
问题排行榜
当前问题的答案已经被保护,只有知县(三级)以上的用户可以编辑!写下您的建议,管理员会及时与您联络!
server is ok

我要回帖

更多关于 存储过程变量类型 的文章

 

随机推荐