新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
随时掌握技术动态,请订阅:
《Web技术日报》
《机器学习日报》
   XML论坛     W3CHINA.ORG讨论区     >>计算机科学论坛<<     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论高级C/C++编程、代码重构(Refactoring)、极限编程(XP)、泛型编程等话题
    [返回] 计算机科学论坛计算机技术与应用『 C/C++编程思想 』 → 4种基本的存储类型[转帖] 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 8226 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 4种基本的存储类型[转帖] 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     happem 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(猛啃高等数学)
      文章:20
      积分:108
      门派:XML.ORG.CN
      注册:2012-8-7

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给happem发送一个短消息 把happem加入好友 查看happem的个人资料 搜索happem在『 C/C++编程思想 』的所有贴子 引用回复这个贴子 回复这个贴子 查看happem的博客楼主
    发贴心情 4种基本的存储类型[转帖]


    我们知道,任何可执行程序最终都会变成一系列的机器指令和数据,在把一个程序的源代码转变为机器指令序列的过程中,一些程序元素被剔除了。另一些程序元素则保留在可执行代码中。

    标准C语言为变量、常量和函数等定义了4种存储类型,即:extern、auto、static、register,它们分别用一个关键词来说明,一个程序元素的存储器类型与它的作用域、生存期限及连接类型具有某种微妙的关系,但是一个具有作用域和连接类型的标识符不一定就具有存储类型。

    这4种存储类型可分为两种生存期限,永久的。

    Extern和static用来标识永久生存期限的变量和函数,而auto和register则用来标识临时生存期限的变量,一个变量或函数只能具有一种存储类型,当然也只能有一种生存期限。默认情况下,全局变量和全局函数的存储类型是extern的,能够被定义在它们之后的同一个编译单元内的函数调用。如果变量和函数被显式地加上extern声明,那么其他编译单元中的函数也能调用它们。显式地声明为static的全局变量和全局函数具有static存储类型,只能被同一个编译单元内的函数调用。

    局部变量默认具有auto存储类型,除非用static或register来定义。但不管如何,它们的作用域都是程序块作用域,链接类型都是内连接,在进入函数的时候创建,在函数退出的时候销毁,register和auto只能声明局部变量和局部常量。

    全局常量的默认存储类型为static的,除非在定义了它的编译单元之外的其他编译单元显式地用extern声明。否则不能被访问。

    局部符号常量的默认存储类型为auto,除非显式地定义为static或register。

    函数的形参是局部变量,因此与一般局部变量的存储类型相同,但是最好不要声明为static的。用register修饰的变量会被直接加载到CPU寄存器中,如果寄存器足以容纳得下它的话,把那些经常使用的变量例如循环计数器等直接放到CPU寄存器中,可以避免在寄存器和内存之间频繁地交换数据,因此能够提高城乡的运作效率,现在有一些聪明的编译器,它们会对程序中出现的变量进行使用频率的评估。把使用频率较高、体积较小的变量直接放入CPU寄存器中,因此一般情况下不需要程序员显式地使用register说明符。

    实际上还有一种存储类型,但它不是变量或函数的属性,而是存储空间的属性,那就是自由存储,不过,这种存储类型与我们这讨论的存储类型已经是完全不同的概念了,它的生存期限不属于上述任何一种,是自由的,即用户根据需要显式地分配和释放,它的生存期限就是分配和释放之间这一段时间。
    资源来自:http://www.lirenedu.org/index.php?ack=xinwen&id=1171


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2012-8-22 15:02:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 C/C++编程思想 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2019-11-15 0:41:25

    本主题贴数1,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( 2 0 0 3 - 2 0 1 0 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    15.869ms