【原】Static静态变量
in 随笔 with 0 comment

【原】Static静态变量

in 随笔 with 0 comment

人会长久停留在一个思想上,因而他也就有可能被束缚住手脚。 --哈里法克斯

写在开头的话

曾经有段日子,我一直坚信一个观点“用空间换时间是一个非常明智的选择”,而且随着云服务的推出,加硬件配置变得如此的轻松,更加让我坚持自己的想法。那么,这样的想法对么?不能说错,当然也不能说对,归结于一个词 划算。所以,现实生产环境中,我们如何去优化我们的代码,让其在时间和空间上达到一个平衡,近可能的降低成本,变得尤为可贵!今天,就聊一聊静态变量。

静态局部变量的特点

  1. 不会随着函数的调用和退出而发生变化,不过,尽管该变量还继续存在,但不能使用它。倘若再次调用定义它的函数时,它又可继续使用,而且保存了前次被调用后留下的值
  2. 静态局部变量只会初始化一次
  3. 静态属性只能被初始化为一个字符值或一个常量,不能使用表达式。即使局部静态变量定义时没有赋初值,系统会自动赋初值0(对数值型变量)或空字符(对字符变量);静态变量的初始值为0。
  4. 当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。虽然用全局变量也可以达到上述目的,但全局变量有时会造成意外的副作用,因此仍以采用局部静态变量为宜。

如何使用静态变量

从前文的特点可以看出,在一个进程中,静态变量始终会占据着一定的内存空间,一直到进程结束才会释放这个内存,而一般的变量,会在函数执行结束的时候就会直接释放掉,这样内存空间会被反复重复利用,所以相对普通变量而言,静态变量将会很耗内存,假设一个静态变量占1K(1024字节,不用觉得很多,算上空格、标点、各种符号,其实存储的数据不会太多)那么并发有1000个的话就需要1M内存,算上程序本身的内存以及各种别的变量内存的开销,那么我并发运行1000个这个程序,我们得有10M左右的内存需求,所以这是很可怕的。

那么如何使用呢?

  1. 只有一个变量在一个进程中做多次修改,同时不是在同一个函数中修改,并且需要保留上次修改的结果的情况下才可以使用静态变量,一句话“不要滥用”。
  2. 静态变量尽量不要太大,存储太多的东西不划算。
  3. 静态变量最好使用一个单独的类管理起来,方便修改和优化。

最后说两句,BUG和性能问题往往会出现在你认为绝对不会出问题的地方!

Comments are closed.