项目中使用了C++开发,使用了大量的“静态函数”,就是用静态函数做一些处理,调用这些静态函数的时候参数都使用的是“引用传递”,如 : ABC:test(x); test的定义是 test(User& user);
但是中途没有创建太多对象。
C++静态函数有没有必要修改为非静态的,就是怕静态函数太多对内存和栈有影响 ,
项目中使用了C++开发,使用了大量的“静态函数”,就是用静态函数做一些处理,调用这些静态函数的时候参数都使用的是“引用传递”,如 : ABC:test(x); test的定义是 test(User& user);
但是中途没有创建太多对象。
C++静态函数有没有必要修改为非静态的,就是怕静态函数太多对内存和栈有影响 ,
我总结了一下,@Huazie @silklove
(1) 静态是主要目的是为了全局共享访问,独立与对象存在。静态和单例共享唯一的存在,它们是二选一的,各有优点。
(2) "静态的变量"是全局的,只要程序运行就一直占用资源的,停止程序才会释放。
静态的变量存储在数据区(常量区、全局区、静态区),它在编译期初始化,首次使用的时候进行构造。
(3) "静态的函数",既然是函数,既不是存放在堆,也不在栈里,是在代码区,
静态成员函数和非静态成员函数都是在类的定义时放在内存的 "代码区"的,只是有this指针的区别。
优化内存不应该"关心函数",而是应该专注于对象的生存周期。
(3) 程序的性能和是不是静态函数、静态变量没有直接关系,只是static方法或者属性越多,
在一开始就会分配固定的内存空间,那么大部分的内存空间分配给了static,剩下的内存空间就不多了,
从这个角度看它是占用了多的内存。但是这和内存溢出没有直接关系(这是另个话题)。
(4) 一般情况下静态函数或类成员静态不会增大程序体积,在编译时, 只会在代码段编译一次,所以静态不会增加程序负担。
但是模板类中使用静态函数,这会随着类模板的不同形参进行内嵌编译,在提高程序性能的同时而造成程序编译体积增大。
(5) 一般来说,C++是面向对象的语言,全局性的一般少用,因为它(静态函数)虽然"方便"——可以在整个工程内,
任何地方使用,但同时意味着它可能被滥用,如果碰上多线程,如果保护不好,容易产生冲突意外。