《编写高质量代码:改善c程序代码的125个建议》——建议8:正确地选择变量的存储类型

简介:

本节书摘来自华章计算机《编写高质量代码:改善c程序代码的125个建议》一书中的第1章,建议8,作者:马 伟 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

建议8:正确地选择变量的存储类型

在计算机中,保存变量当前值的存储单元有两类:一类是内存,另一类是CPU的寄存器。变量的存储类型关系到变量的存储位置,在C语言中,为变量提供了4种存储类型:auto(自动)型、static(静态)型、register(寄存器)型和extern(外部)型。它们关系到变量在内存中的存放位置,由此决定了变量的保留时间和变量的作用范围。
变量的保留时间又称为生存期,从时间的角度来看,可将变量分为静态存储和动态存储两种情况。静态存储是指变量存储在内存的静态存储区中,在编译时就为它分配了存储空间,在整个程序的运行期间,该变量占有固定的存储单元,程序执行结束后,这部分空间才会释放,变量的值在整个程序中始终存在;动态存储是指变量存储在内存的动态存储区中,在程序的运行过程中,只有当变量所在的函数被调用时,编译系统才临时为该变量分配一段内存单元,函数调用结束时,该变量空间就会释放,变量的值只在函数调用期存在。
变量的作用范围又称为作用域,从空间角度来看,可以将变量分为局部变量和全局变量。局部变量是在一个函数或复合语句内定义的变量,它仅在函数或复合语句内有效,编译时,编译系统不为局部变量分配内存单元,而是在程序运行过程中,当局部变量所在的函数被调用时,编译系统才会根据需要临时分配内存,调用结束后,释放空间;全局变量是在函数之外定义的变量,其作用范围为从定义处开始到本文件结束,编译时,编译系统会为其分配固定的内存单元,在程序运行的自始至终它都占用着固定的单元。

相关文章
|
监控 算法 Java
深入理解Java中的垃圾回收机制
【2月更文挑战第13天】 本文旨在深入剖析Java中的核心机制之一——垃圾回收(Garbage Collection, GC)。与传统的摘要不同,我们不会概述全文内容,而是直接点明文章将探讨的重点问题:如何合理利用垃圾回收机制优化Java应用性能。通过分析不同垃圾回收器的工作原理与特点,本文将指导开发者识别和处理内存泄漏,选择合适的垃圾回收策略,以及评估垃圾回收行为对应用性能的实际影响。
|
12月前
|
网络协议 算法 安全
HCIP-Datacom H12-821 题库 (1)
HCIP-Datacom H12-821 题库 (1)
148 0
HCIP-Datacom H12-821 题库 (1)
|
10月前
|
供应链 算法 测试技术
基于控制工程的牛鞭效应simulink建模与仿真
本研究基于控制理论,建立了多级线性供应链模型,利用噪声带宽和Matlab/Simulink对牛鞭效应进行建模与仿真。牛鞭效应指需求信息在供应链中逐级放大,导致库存积压、缺货等问题。通过Forrester模型,描述各节点订单量与库存水平的动态变化,采用差分方程模拟多级供应链系统。测试使用MATLAB2022A版本,展示了模型的有效性和可扩展性。
|
机器学习/深度学习 算法 数据库
R-CNN论文详解(入门目标检测必读)
R-CNN论文详解(入门目标检测必读)
R-CNN论文详解(入门目标检测必读)
|
存储 Shell Linux
【Shell 命令集合 系统设置 】Linux 显示或设置键盘按键与其相关的功能 bind命令 使用指南
【Shell 命令集合 系统设置 】Linux 显示或设置键盘按键与其相关的功能 bind命令 使用指南
239 0
|
分布式计算 数据挖掘 调度
阿里云 MaxCompute 2023-5~8 月刊
【MaxCompute已发布免费试用计划,为数仓建设提速】新用户可0元领取5000CU*小时计算资源与100GB存储,有效期3个月。
698 2
阿里云 MaxCompute 2023-5~8 月刊
|
算法 安全 大数据
深入理解操作系统的内存管理
【5月更文挑战第11天】 在现代计算系统中,操作系统扮演着至关重要的角色,它负责协调和管理计算机硬件与软件资源。其中,内存管理作为操作系统的核心功能之一,其效率和可靠性直接影响到整个系统的性能。本文将深入探讨操作系统中内存管理的关键概念、技术以及面临的挑战,旨在为读者提供一个清晰而详尽的内存管理机制视角。我们将从内存的物理结构出发,逐步解析虚拟内存技术的实现原理,并讨论当前操作系统如何通过各种算法优化内存分配,以及处理内存碎片和泄漏等问题。
|
人工智能 算法
AI 绘画Stable Diffusion 研究(九)sd图生图功能详解-老照片高清修复放大(2)
AI 绘画Stable Diffusion 研究(九)sd图生图功能详解-老照片高清修复放大
1169 0
Servlet 教程 之 Servlet Cookie 处理 6
该教程展示了如何使用Servlet读取Cookie。在`doGet`方法中,通过`HttpServletRequest`的`getCookies()`获取Cookie数组,然后遍历并使用`getName()`和`getValue()`获取每个Cookie的详细信息。如果找到名为"name"的Cookie,将其最大生存期设为0以删除。输出显示Cookie的名称和解码后的值。当无Cookie时,则显示相应消息。
120 0
|
算法 Java
JVM学习笔记(2)——MarkWord和GC入门
JVM学习笔记(2)——MarkWord和GC入门
227 0