使用全局变量的优点是:可以减少变量的个数,减少由于实际参数和形式参数的数据传递带来的时间消耗。
但是,使用全局变量也有许多缺点:
(1)全局变量保存在静态存贮区,程序开始运行时为其分配内存,程序结束释放该内存。与局部变量的动态分配、动态释放相比,生存期比较长,因此过多的全局变量会占用较多的内存单元。
(2)全局变量破坏了函数的封装性能。前面的章节曾经讲过,函数象一个黑匣子,一般是通过函数参数和返回值进行输入输出,函数内部实现相对独立。但函数中如果使用了全局变量,那么函数体内的语句就可以绕过函数参数和返回值进行存取,这种情况破坏了函数的独立性,使函数对全局变量产生依赖。同时,也降低了该函数的可移植性。
(3)全局变量使函数的代码可读性降低。由于多个函数都可能使用全局变量,函数执行时全局变量的值可能随时发生变化,对于程序的查错和调试都非常不利。
因此,如果不是万不得已,最好不要使用全局变量

一个子程序与外界的直接联系越少,则内聚性越好,而与外界联系,就是全局变量和参数 ,所以参数和全局变量越少越好,否则程序很难维护,可读性也不高。而且,全局变量占用固定地址不变,在函数中,或局部要读取它时还得到外界去找,而且在一个大点的程序中如果大量使用全局变量会降低程序的可读性,而且占用了大量的有限空间,降低运行速度。

全局变量有些时候是无法避免的,只能尽量减少全局变量。我能想到的主要有三个方面:
1、通过函数参数传递数据或指针。对于回调函数,通常有一个参数是自定义的数据指针,可以利用这个参数传递类指针或者自定义一个结构的指针。
2、只在某一个函数中使用的变量可以定义为局部静态变量(在函数内部定义,前面加static修饰)。
3、把全局变量定义成一个结构,定义一个全局的结构体变量。

如何有效减少全局变量的使用相关推荐

  1. 局部变量和全局变量,如何减少全局变量的频繁使用

    Author:快来啾啾我 ps:废了废了 文章目录 前言 一.局部变量(Local Variable) 1.局部变量是什么? 1.1局部变量存储位置 2.局部变量是什么? 二.全局变量(Global ...

  2. Java面试题之HashMap如何有效减少碰撞

    1.扰动函数算法,促使元素位置分布均匀,减少碰撞几率: 2.使用final对象,并采用合适的equals方法和hashCode方法: 转载于:https://www.cnblogs.com/hujin ...

  3. Androud 如何有效减少重复代码

    前言 重复的代码一直都是可维护性的大敌,重构的重要任务之一也就是要去除掉重复的代码,有效的减少重复代码,可以大大提高软件的扩展性. 在Android开发中,很容易产生重复的代码.因为Android是组 ...

  4. 电商必备,如何有效减少客户弃购?

    经过大量努力,您用心经营业务并建立了您的在线商店.但是您的客户没有完成购买.他们将商品添加到他们的在线购物车中-然后他们还是选择了离开. 或许客户是由于价格.对商品还存在疑惑或者是其他各自原因导致犹豫 ...

  5. 从支付宝面试题谈:怎样有效减少用户咨询的客服成本

    [问题]一款产品,无论是网站,还是APP,客服始终是一个重要的组成部分,面对越发以"用户为中心"的个性化服务趋势,如何有效减少客服成本,是公司们非常关心的问题.通过分析和参考其他前 ...

  6. 在javascript中关于局部变量和全局变量简析

    最近见群里有一道关于面试的试题,考察的关于全局变量和局部变量的基础知识: fun foo(){ var a = b = 0; } 让选择a和b的值分别为多少,或许不仔细看,我们很可能把a和b都当成了局 ...

  7. js如何降低全局变量带来的命名污染

    <h1>1.使用命名空间</h1> <p>适当使用命名空间,并不会杜绝全局变量,但可以减少全局变量的数量</p> <p>最简单的方法依然是用 ...

  8. aps高级排产减少生产过程中的瓶颈

    瓶颈一般是指在整体中的关键限制因素.瓶颈在不同的领域有不同的含义.生产中的瓶颈是指那些限制工作流整体水平(包括工作流完成时间,工作流的质量等)的单个因素或少数几个因素.通常把一个流程中生产节拍最慢的环 ...

  9. javascript全局变量和变量污染

    javascript全局变量和变量污染 全局变量&&变量污染 定义全局变量有 3 种方式: 1:在任何函数体外直接使用 var 语句声明. var a = 10; 2 :直接添加属性到 ...

最新文章

  1. python回归建模_Python实现回归预测及模型优化
  2. 长沙校园招聘总结-做为技术面试官
  3. 前端学习(2379):加入git管理
  4. 百度CDN与360CDN简单评测,果断选择百度CDN
  5. 【今日CV 计算机视觉论文速览 第146期】Mon, 22 Jul 2019
  6. 服务器拒绝访问位置不可用,Win7打开Local Settings文件夹提示“位置不可用,拒绝访问如何解决...
  7. php viewmodel,PHP日记——Lavarel常用语句之View篇
  8. 熟悉网络层IP协议和数据链路层
  9. opencv ubuntu 汉字_OpenCV在ubuntu下的编译
  10. Mongoose使用——nodejs结合mongodb
  11. Matlab 自定义imagesc彩色渲染
  12. 原来我们都让历史书骗了- -#!~
  13. php微信公众号开发图片预览,微信公众号点亮图片怎么做
  14. php app用户验证失败,Apple App Store无法成功添加沙箱技术测试员账号
  15. 解决mysqld: [ERROR] Found option without preceding group in
  16. 白钢条用什么可以切割_白钢用什么切割?
  17. TMS320F28335中断向量表
  18. 微信小程序云开发-内容管理系统(CMS)小案例
  19. linux搭建个人网盘,Linux下使用nextcloud搭建个人网盘
  20. k8s登录_用户名密码方式登录Kubernetes-Dashboard

热门文章

  1. MPLAB常见问题及解决方法
  2. 解决SAP业务问题的思考——逆向思维
  3. java--Timer 定时器
  4. pandas - 股票K线数据重采样
  5. Augustus操作指南
  6. (二)python学习笔记之列表入门
  7. 频率与听感的对应关系
  8. Skia引擎API整理介绍(skia in Android 2.3 trunk)
  9. 牛客--剑指offer,JZ3,JZ4,JZ5,JZ6
  10. 谷粒学院前台登录流程