• static 静态


    摘自:https://blog.csdn.net/Kendiv/article/details/675941

    关于static的  ""记忆性""

    我们可以用做按键的检测,,,因为按键要有除颤消抖过程

    示例程序一
    #include <iostream>

    using namespace std;

    void staticLocalVar()
    {
     static int a = 0; // 运行期时初始化一次, 下次再调用时, 不进行初始化工作
     cout<<"a="<<a<<endl;
     ++a;
    }

    int main()
    {
     staticLocalVar(); // 第一次调用, 输出a=0
     staticLocalVar(); // 第二次调用, 记忆了第一次退出时的值, 输出a=1
     return 0;
    }

    1. “记忆性”, 程序运行很重要的一点就是可重复性, 而static变量的”记忆性”破坏了这种可重复性, 造成不同时刻至运行的结果可能不同.
    2. “生存期”全局性和唯一性. 普通的local变量的存储空间分配在stack上, 因此每次调用函数时, 分配的空间都可能不一样, 而static具有全局唯一性的特点, 每次调用时, 都指向同一块内存, 这就造成一个很重要的问题 ---- 不可重入性!!!
    这样在多线程程序设计或递归程序设计中, 要特别注意这个问题.

    ////////////////////

    上面提到用静态的记忆性,可以编写按键的消抖程序.

    关于静态的记忆性,让我想到一个点子,可以化简程序的:

    比如一个程序要播放SD卡里的声音,,SD卡里有各种规格的wav文件,,,虽然都是wav文件,但是每种类型是不一样的...

    有16位的wav;有8位的wav;  假设我们只知道SD卡里是wav却不知道是哪种规格的,,所以,我们就需要写程序把wav头文件读进来

    然后分别去判断,,,,,,每次播放一个段音乐,我们就要判断一次,,,这样是不是很麻烦,,

    既然静态有记忆作用,,,我们就让程序走一遍,,只判断一次,,然后记住这个选择,,,之后就不用再次循环判断了

    //

    //还有另一种情况,SD卡里有各种各样的音乐,,,每种音乐对应不同的解码算法,,,,在我们切换音乐的时候

    需要判断要用那种算法,,之后再播这首曲子的整个过程中就没必要来回判断了,,,我们可以用静态记录算法是哪个

    只有切换曲子的时候再次修改静态中记录的算法即可

  • 相关阅读:
    spring AOP
    ElasticSearch RestHighLevelClient 通用操作
    JDK动态代理为什么必须针对接口
    Spring 中的统一异常处理
    ThreadPoolExecutor线程池解析与BlockingQueue的三种实现
    LinkedList源码解析(JDK8)
    MySQL表的四种分区类型
    Reids原理之IO模型
    缓存穿透和缓存雪崩问题
    uwsgi中processes和thread参数的影响大小
  • 原文地址:https://www.cnblogs.com/chulin/p/8966244.html
Copyright © 2020-2023  润新知