【浅谈】计算机存储 寄存器,高速缓存,内存和硬盘 栈区,堆区和静态区

本文主要是介绍【浅谈】计算机存储 寄存器,高速缓存,内存和硬盘 栈区,堆区和静态区,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

https://blog.csdn.net/m0_66300397/article/details/130020405

计算机上的存储
数据在计算机中,存储在硬盘,内存,高速缓存和寄存器上。

四者根据速度和存储量,有如下表示:

寄存器上,一般都是字节大小的存储空间;高速缓存器上的存储空间要相对大一点,可以达到MB,但是也只是很小的存储空间。

电脑大部分的数据都存储在内存上,一般电脑的内存都是4G,8G,16G的,目前市场上电脑支持的最大运行内存是128G。

硬盘是用来做内存扩充的,像我们平常下载的游戏,缓存的资源,都是放在硬盘上,所以硬盘上的空间要明显更大一点,但是想要使用硬盘上的数据时,要将硬盘数据拿到内存中。

内存
像我们编程中所产生的数据,都是存储在内存中,而内存上,也分为多个区域,像内存分配就分为三种:栈区,堆区,静态区。

栈区,是用来存放局部变量和函数的形式参数等数据,函数执行结束时,这些存储单元自动被释放,栈区内存分配运算效率很高,但是内存有限。

堆区是用来进行动态内存开辟的,一般由程序员分配释放,若程序员不释放,程序结束时会被OS回收。

静态区是存放全局变量,被static关键字修饰后的静态变量,常量等数据,是在程序结束后由系统进行释放。静态区的数据是可以修改的,只是生命周期较长。

所以说,变量放在哪里,取决于该变量的性质,局部变量是放在栈区的,全局变量和被static修饰的静态变量则是放在静态区。

说起static关键字,下面我们再来介绍几个编程中相关的关键字。

关键字
static关键字
普通的局部变量是放在内存的栈区上的,进入局部范围,变量创建,出了局部范围变量销毁。

当static修饰局部变量的时候,局部变量是在静态区开辟空间的,这时的局部变量,出了作用域变量不销毁,下次进入作用域,使用的是上一次遗留的数据。

例如我们想要写一串数字:3 4 5 6 7 8 9 10

我们给出如下代码:

void test()
{
    int a = 3;
    a++;
    printf("%d\n", a);
}
 
int main()
{
    int i = 0;
    while (i < 7)
    {
        test();
        i++;
    }
    return 0;
}

上面这串代码,对于变量a,可以看出,它是局部变量。那么根据局部变量的性质,可以知道该变量,出作用域就会销毁,即运行结果为:

虽然test运行了七次,但是每次进入后,a加1,同时出作用域,a的数据销毁,再次进入,a的初始数据,还是3。

3+1,仍为4,并不能满足我们的需求,这个时候,让我们用static关键字来修饰a呢?

void test()
{
    static int a = 3; //这里用static修饰了a
    a++;
    printf("%d\n", a);
}
 
int main()
{
    int i = 0;
    while (i < 7)
    {
        test();
        i++;
    }
    return 0;
}

运行结果:


显然,这次是符合我们的需求的。

因为被static修饰后的a,是常变量,放在静态区,尽管在运行过程中,出了test的作用域也没有立即销毁, 在一次次进入test的过程中,使数据达到了累加的效果。

register关键字
int a = 0;
register int b = 1;
像用普通int定义的a和b都是变量,无论是全局变量还是局部变量,都是要放在内存中的,用“register”修饰后的b,可以建议将b的数据1放到寄存器中,但运行的时候,系统会自动判定,至于放不放到寄存器中,还要看系统人老人家怎么看啦~~
 

这篇关于【浅谈】计算机存储 寄存器,高速缓存,内存和硬盘 栈区,堆区和静态区的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/402309

相关文章

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

HDFS—存储优化(纠删码)

纠删码原理 HDFS 默认情况下,一个文件有3个副本,这样提高了数据的可靠性,但也带来了2倍的冗余开销。 Hadoop3.x 引入了纠删码,采用计算的方式,可以节省约50%左右的存储空间。 此种方式节约了空间,但是会增加 cpu 的计算。 纠删码策略是给具体一个路径设置。所有往此路径下存储的文件,都会执行此策略。 默认只开启对 RS-6-3-1024k

NameNode内存生产配置

Hadoop2.x 系列,配置 NameNode 内存 NameNode 内存默认 2000m ,如果服务器内存 4G , NameNode 内存可以配置 3g 。在 hadoop-env.sh 文件中配置如下。 HADOOP_NAMENODE_OPTS=-Xmx3072m Hadoop3.x 系列,配置 Nam

浅谈主机加固,六种有效的主机加固方法

在数字化时代,数据的价值不言而喻,但随之而来的安全威胁也日益严峻。从勒索病毒到内部泄露,企业的数据安全面临着前所未有的挑战。为了应对这些挑战,一种全新的主机加固解决方案应运而生。 MCK主机加固解决方案,采用先进的安全容器中间件技术,构建起一套内核级的纵深立体防护体系。这一体系突破了传统安全防护的局限,即使在管理员权限被恶意利用的情况下,也能确保服务器的安全稳定运行。 普适主机加固措施:

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

Thymeleaf:生成静态文件及异常处理java.lang.NoClassDefFoundError: ognl/PropertyAccessor

我们需要引入包: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>sp

速了解MySQL 数据库不同存储引擎

快速了解MySQL 数据库不同存储引擎 MySQL 提供了多种存储引擎,每种存储引擎都有其特定的特性和适用场景。了解这些存储引擎的特性,有助于在设计数据库时做出合理的选择。以下是 MySQL 中几种常用存储引擎的详细介绍。 1. InnoDB 特点: 事务支持:InnoDB 是一个支持 ACID(原子性、一致性、隔离性、持久性)事务的存储引擎。行级锁:使用行级锁来提高并发性,减少锁竞争

JVM内存调优原则及几种JVM内存调优方法

JVM内存调优原则及几种JVM内存调优方法 1、堆大小设置。 2、回收器选择。   1、在对JVM内存调优的时候不能只看操作系统级别Java进程所占用的内存,这个数值不能准确的反应堆内存的真实占用情况,因为GC过后这个值是不会变化的,因此内存调优的时候要更多地使用JDK提供的内存查看工具,比如JConsole和Java VisualVM。   2、对JVM内存的系统级的调优主要的目的是减少

JVM 常见异常及内存诊断

栈内存溢出 栈内存大小设置:-Xss size 默认除了window以外的所有操作系统默认情况大小为 1MB,window 的默认大小依赖于虚拟机内存。 栈帧过多导致栈内存溢出 下述示例代码,由于递归深度没有限制且没有设置出口,每次方法的调用都会产生一个栈帧导致了创建的栈帧过多,而导致内存溢出(StackOverflowError)。 示例代码: 运行结果: 栈帧过大导致栈内存

理解java虚拟机内存收集

学习《深入理解Java虚拟机》时个人的理解笔记 1、为什么要去了解垃圾收集和内存回收技术? 当需要排查各种内存溢出、内存泄漏问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,我们就必须对这些“自动化”的技术实施必要的监控和调节。 2、“哲学三问”内存收集 what?when?how? 那些内存需要回收?什么时候回收?如何回收? 这是一个整体的问题,确定了什么状态的内存可以