zoukankan      html  css  js  c++  java
  • 转:const“变量”、define的常量和static 变量

    首先讲C编译器的内存分配:

     代码区

     数据区

     用户区=线程栈+堆

    其中的数据区存储:常量(define)+静态变量(static)+符号集(const)+全局变量
     
    然后讲一下编译的大致顺序:
    注释-->
    预处理-->
    编译-->
    连接。
     
    它们的保存:
    const修饰的是变量,会被编译到符号集中去,它本身是变量这是个大前提,如果把这个概念弄错了,你就会很可能会用这个变量来做数组的维数,而数组的维数只能是常量,这点要明白。
    define定义的常量就可以作为数组的维数,它当然是保存在数据区的常量空间内,并且它发生在预处理阶段,相对const变量的处理要早。
    static修饰的变量则被编译进数据区的静态空间内,同const修饰的变量和define定义的常量一样,一直存在,直到程序终止。
     
    它们的初始化(如果有的话)
    const修饰的变量是在编译时放到了符号集中,只是在第一次使用的时候分配空间,没有什么初始化这样的概念。
    define定义的变量则是在每次出现在“=”的右边时都会分配空间,你要注意是都分配了空间。至于在预处理的时候有没有分配空间的概念,我自己尚不清楚。
    static修饰的变量的初始化要等到运行的时候。
     
    它们存在的目的:
    const和static修饰的数据都是有类型的,由于const修饰变量常常理解成常量,它可以看做是取代define定义的无类型常量的。
    static修饰变量则多在子函数中使用,你大可发挥一下,找到它的妙用。
  • 相关阅读:
    React Native 架构演进
    React Native 架构一览
    React Native 在 Airbnb 的起起落落
    React Native简史
    图解云服务模型的演进
    伯克利研究员们眼中的Cloud Computing
    彻底理解 IaaS、PaaS、SaaS
    JS更随机的随机数
    JS自动化
    fingerprint2 计算浏览器指纹分析
  • 原文地址:https://www.cnblogs.com/anns/p/3370523.html
Copyright © 2011-2022 走看看