li-heng 2022-11-24 23:25 采纳率: 80.8%
浏览 4
已结题

关于#c++#的问题:项目中使用了C++开发,就是用静态函数做一些处理

项目中使用了C++开发,使用了大量的“静态函数”,就是用静态函数做一些处理,调用这些静态函数的时候参数都使用的是“引用传递”,如 : ABC:test(x); test的定义是 test(User& user);
但是中途没有创建太多对象。

C++静态函数有没有必要修改为非静态的,就是怕静态函数太多对内存和栈有影响 ,

  • 写回答

3条回答 默认 最新

  • li-heng 2022-11-25 00:33
    关注
    我总结了一下,@Huazie @silklove1) 静态是主要目的是为了全局共享访问,独立与对象存在。静态和单例共享唯一的存在,它们是二选一的,各有优点。
    (2"静态的变量"是全局的,只要程序运行就一直占用资源的,停止程序才会释放。
            静态的变量存储在数据区(常量区、全局区、静态区),它在编译期初始化,首次使用的时候进行构造。
    (3"静态的函数",既然是函数,既不是存放在堆,也不在栈里,是在代码区,
            静态成员函数和非静态成员函数都是在类的定义时放在内存的 "代码区"的,只是有this指针的区别。
            优化内存不应该"关心函数",而是应该专注于对象的生存周期。
    (3) 程序的性能和是不是静态函数、静态变量没有直接关系,只是static方法或者属性越多,
            在一开始就会分配固定的内存空间,那么大部分的内存空间分配给了static,剩下的内存空间就不多了,
            从这个角度看它是占用了多的内存。但是这和内存溢出没有直接关系(这是另个话题)。
    (4) 一般情况下静态函数或类成员静态不会增大程序体积,在编译时, 只会在代码段编译一次,所以静态不会增加程序负担。
            但是模板类中使用静态函数,这会随着类模板的不同形参进行内嵌编译,在提高程序性能的同时而造成程序编译体积增大。
    (5) 一般来说,C++是面向对象的语言,全局性的一般少用,因为它(静态函数)虽然"方便"——可以在整个工程内,
            任何地方使用,但同时意味着它可能被滥用,如果碰上多线程,如果保护不好,容易产生冲突意外。
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 1月19日
  • 已采纳回答 1月11日
  • 修改了问题 11月24日
  • 创建了问题 11月24日

悬赏问题

  • ¥15 远程桌面文档内容复制粘贴,格式会变化
  • ¥15 关于#java#的问题:找一份能快速看完mooc视频的代码
  • ¥15 这种微信登录授权 谁可以做啊
  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题