计算机变量内存分区

news2024/11/18 16:24:23

内存分区

堆区、栈区、全局区、文字常量区、代码区

  • 1.堆区:malloccallocreallocfree操作,可读可写;
  • 2.栈区:局部变量、函数形参、返回值 、可读可写
  • 3.全局区:全部变量、静态局部变量、静态全局变量 、可读可写;
  • 4.文字常量区:常量、字符常量、字符串常量 只读
  • 5.代码区:代码的二进制指令 只读

宏函数(空间换时间) #define 销毁宏undef

#define Uli(a,b) a*b
#define Uli2(a,b) (a)*(b)

Uli(5+2,2+2)=(5+2*2+2)=11
Uli2(5+2,2+2)=((5+2)*(2+2))=28
Uli(Uli(5+2,2+2),Uli2(5+2,2+2))=(5+2*2+2*(5+2)*(2+2))=65//注意此处计算是不能统一计算需要展开

注意:宏函数定义带括号跟不带括号的区别,计算方式也是不同的

  • 带参的宏 在预处理时展开 有大量的重复代码(占空间)没有函数调用带来的出入栈测开销(时间)用空间换时间
  • 宏的参数没有时间类型 不能保证参数的完整性
  • 宏没有作用域的限制,不能作为结构体或者类的成员 (重点)

函数(时间换空间)

  • 函数调用 需要出入栈的开销时间,代码只有一份节约空间,时间换空间
  • 函数的参数有类型 ,可以保证参数的完整性
  • 有作用域的限制 能作为结构体或者类的成员

静态区static

  • 在c语言中定义静态变量的时候,会改变当前变量的生命周期,并改变变量的村粗区域,首先局部变量存储在栈中,全局变量存储在堆中,当你使用static进行修饰的时候,改变了变量的存储类型使之存储在静态区中,这时的生命周期跟全局变量的生命周期一样都是在等程序的销毁才结束,内存才回收,那么这时候的变量就可以当做全局变量来看,看以下代码
    在这里插入图片描述
    这段代码主要就是循环执行5次test方法,第一种定义变量的时候i作为局部变量在每次函数执行完毕就直接销毁了,所以每次进入test方法都重新赋值一遍。 第二种方式在方法里面定义静态变量让其变量i保存在静态区生命周期同程序销毁一起,所以每次i++的值都保存了下来,直到程序结束

  • static关键字创建的变量如果不复制默认是0,跟intchar这些关键字创建的变量不一样,他们创建出来的都是随机指向一个内存地址
    在这里插入图片描述

  • static修饰全局变量,那么这个变量只能在本源文件中使用,原本全局变量默认是具有外部链接属性的,在外部文件中使用只需要使用extern 关键字进行引入,然后同时执行两个文件就行,但是使用了static进行修饰的时候,让其变为只具备内部链接属性
    在这里插入图片描述
    在这里插入图片描述在进行比对不难发现外部定义的变量不能使用了,外部函数同样也是这种效果,我就不展示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2177817.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

动手学深度学习(李沐)PyTorch 第 5 章 深度学习计算

5.1 层和块 为了实现这些复杂的网络,我们引入了神经网络块的概念。 块(block)可以描述单个层、由多个层组成的组件或整个模型本身。 使用块进行抽象的一个好处是可以将一些块组合成更大的组件, 这一过程通常是递归的,…

Matlab实现鲸鱼优化算法优化回声状态网络模型 (WOA-ESN)(附源码)

目录 1.内容介绍 2部分代码 3.实验结果 4.内容获取 1内容介绍 鲸鱼优化算法(Whale Optimization Algorithm, WOA)是一种基于座头鲸捕食行为的群智能优化算法。该算法通过模仿座头鲸使用螺旋形路径和包围猎物的策略来探索和开发解空间,以找到…

「Python入门」Pycharm的安装和运行

文章目录 Pycharm介绍文件介绍安装Pycharm打开pycharm配置python解释器运行代码新建文件 Pycharm介绍 PyCharm是由JetBrains打造的一款Python IDE(Integrated Development Environment,集成开发环境),带有一整套可以帮助用户在使…

用manim实现有想法的Pi

这幅图展示了一个关于矩阵乘法的数学公式,背景为深绿色,给人一种简洁而专业的感觉。图中间是一个矩阵乘法的表达式,左侧是两个 2222 矩阵,分别为: 右侧则是它们的乘积,结果矩阵为: 整个公式被一…

Windows:win11旗舰版连接无线显示器,连接失败

摘要:win11系统通过 miracast 无线连接到长虹电视的时候,一直连接不上。查看电脑又是支持 miracast 协议,后续发现关闭防火墙即可正常连接。 一、问题现状 最近公司里新换了电视,打算把笔记本电脑投屏到电视上。由于 HDMI 插拔不…

电子信息工程职称评审流程有哪些?

电子信息工程职称评审流程有哪些? 2024年工程类职称评审6大步骤: 1.确认申报条件 2.准备评审材料 3.提交评审材料 4.组织专家评审 5.进入答辩环节 6.职称公示下证 哪些人可以评电子信息工程呢? 从事微电子、计算机与网络、信息与通信、…

媒体发稿:怎样写下有吸引力的文案共享-华媒舍

媒体发稿推广已成为企业、机构和个人宣传策划的重要方式之一。因为市场竞争激烈,怎样写下有吸引力的爆款文案成为了一个重要环节。这篇科谱详细介绍文章内容将为您分享一些对于如何写下爆款文案的机密手册。 1、关键词的风采 题目是文案的店面,取决于读…

头戴式耳机性价比排名有哪些?五大头戴式耳机排名推荐!

现在头戴式耳机凭借其优良的音质、舒适的佩戴体验和出色的隔音效果,成为了众多音乐爱好者和影音娱乐用户的首选。然而,面对市场上众多品牌和型号,如何选择一款性价比高、符合个人需求的耳机,头戴式耳机性价比排名有哪些&#xff1…

Android OpenGLES2.0开发(三):绘制一个三角形

我们总是对陌生人太客气,而对亲密的人太苛刻 上一篇文章中,我们已经将OpenGL ES环境搭建完成。接下来我们就可以开始我们的绘图之旅了。该篇我们讲解最基本图形三角形的绘制,这是一切绘制的基础。在OpenGL ES的世界里一切图形都可以由三角形拼…

Linux云计算 |【第四阶段】RDBMS1-DAY5

主要内容: 试图概述(创建视图VIEW、修改、查看、删除)、变量(全局变量、会话变量、用户变量、局部变量)、存储过程(创建、调用、删除存储过程)、流程控制结构(分支结构:…

必备!8款热门网页制作工具大汇总

在过去,网站的构建主要依赖专业人员手动编写HTML、CSS和JavaScript等代码。然而,如今涌现出越来越多智能化的网页制作工具,使得任何人都能在零编码基础上轻松创建和设计网站。本文将向您介绍2022年热门的网页制作工具。选择合适的网页制作工具…

【WPF】桌面程序开发之窗口的用户控件详解

使用Visual Studio开发工具,我们可以编写在Windows系统上运行的桌面应用程序。其中,WPF(Windows Presentation Foundation)项目是一种常见的选择。然而,对于初学者来说,WPF项目中xaml页面的布局设计可能是一…

Naive UI 选择器 Select 的:render-label 怎么使用(Vue3 + TS)

项目场景: 在Naive UI 的 选择器 Select组件中 ,如何实现下面的效果 ,在下拉列表中,左边展示色块,右边展示文字。 Naive UI 的官网中提到过这个实现方法,有一个render-label的api,即&#xff…

Golang | Leetcode Golang题解之第442题数组中重复的数据

题目&#xff1a; 题解&#xff1a; func findDuplicates(nums []int) (ans []int) {for _, x : range nums {if x < 0 {x -x}if nums[x-1] > 0 {nums[x-1] - nums[x-1]} else {ans append(ans, x)}}return }

有通话质量更好的蓝牙耳机推荐吗?高品质的平价开放式耳机推荐

个人认为开放式耳机在通话方面还是表现不错的&#xff0c;主要有以下几个原因&#xff1a; 首先&#xff0c;在麦克风设计与配置方面&#xff1a; 拥有高品质麦克风硬件。优质的开放式耳机往往会配备高性能的麦克风&#xff0c;这些麦克风灵敏度较高&#xff0c;能够精准地捕捉…

1.2.1 HuggingFists安装说明-Linux安装

Linux版安装说明 下载地址 【GitHub】https://github.com/Datayoo/HuggingFists 【百度网盘】https://pan.baidu.com/s/12-qzxARjzRjYFvF8ddUJQQ?pwd2024 安装说明 环境要求 操作系统&#xff1a;CentOS7 硬件环境&#xff1a;至少4核8G&#xff0c;系统使用Containerd…

如何理解矩阵的复数特征值和特征向量?

实数特征值的直观含义非常好理解&#xff0c;它就是在对应的特征向量方向上的纯拉伸/压缩。 而复数特征值&#xff0c;我们可以把它放在复数域中理解。但是这里给出一个不那么简洁、但是更加直观的理解方式&#xff1a;把它放在实空间中。那么复数特征值表现的就是旋转等比放大…

Linux进程间的通信(三)IPC-信号通信和system-V消息队列

目录 信号通信 信号动作的改写 测试 信号的发送 消息队列 消息队列创建要用到的函数 send.c&#xff1a; recv.c 控制消息队列 信号通信 信号通信是一种在 Unix 和类 Unix 系统&#xff08;如 Linux&#xff09;中用于进程间异步通知的机制。信号是一种软件中断&#x…

数据库软题3-专门的集合运算

一、投影&#xff08;筛选列&#xff09; 题1 题2 二、选择(筛选行) 三、连接 3.自然连接 题1-自然连接的属性列数&#xff08;几元关系&#xff09;和元组数 解析&#xff1a; 题2-自然连接的属性列数&#xff08;几元关系&#xff09;和元组数 自然连接后的属性个数 A列…

SpringBoot3+Druid YAML配置

背景 Druid连接池是阿里巴巴开源的数据库连接池项目。Druid连接池为监控而生&#xff0c;内置强大的监控功能&#xff0c;监控特性不影响性能。功能强大&#xff0c;能防SQL注入&#xff0c;内置Loging能诊断Hack应用行为。现在已经SpringBoot3&#xff0c;Druid的配置也需要随…