精华内容
下载资源
问答
  • 内存什么作用

    千次阅读 2018-06-26 21:32:11
     内存:RAM-随机存储器。 程序的运行是需要有一个场所的,因为对于CPU来说,甭管i7或者i8就那么几个寄存器,这一点特别能被忽略,对的,再高级的CPU确实只有那么几个寄存器,CPU的所有动作都是直接对寄存器操作的...

        这一问题乍一看会觉得特别简单,但是仔细一想,却很难准确的概括。

        内存:RAM-随机存储器。

        程序的运行是需要有一个场所的,因为对于CPU来说,甭管i7或者i8就那么几个寄存器,这一点特别能被忽略,对的,再高级的CPU确实只有那么几个寄存器,CPU的所有动作都是直接对寄存器操作的,都是要一个一个来的,就相当于总理,总理日理万机,即便要干n多事情,还是在他那个有限的大脑里一件一件的去做,所以为了运行大的和多的程序必然要有个临时的场地,而且还要保证跟CPU能够进行最快的通信,这里的内存就相当于总理的秘书处,存放将要运行的和正在运行的程序变量和各种参数,因为是总理的秘书处,所以跟总理的沟通也是最快的。

        内存和硬盘不同,硬盘是用来存储数据的,不是为了运行程序的。程序运行时,是“秘书处”先把程序代码从硬盘中转移到内存中,然后等到总理(CPU)腾出手来,就从秘书处(内存)进行运行数据,当然了,总理(CPU)的思考过程是要在总理的大脑中(CPU内的计算单元和少量的寄存器)。

        总结,内存就是一个临时存储器,运行程序时,有一个机构会先将程序代码和参数变量存放到内存中,然后CPU来读,接着执行,当然了,当关机后,里面的数据也就没有了。

    展开全文
  • 什么是内存对齐以及作用

    千次阅读 多人点赞 2019-05-04 11:15:47
    什么是内存对齐? 为了解释这个问题,先来介绍下面的例子: #include<iostream> using namespace std; struct A { char a; short b; int c; }; struct B { short b; int c; char a; }; int main()...

    什么是内存对齐?

    为了解释这个问题,先来介绍下面的例子:

    #include<iostream>
    using namespace std;
    
    struct A
    {
     	char a;
     	short b;
     	int c;
    };
    
    struct B
    {
    	short b;
    	int c;
    	char a;
    };
    
    int main()
    {
     	cout<<sizeof(A)<<endl;
     	cout<<sizeof(B)<<endl;
     	
     	return 0;
     }
    

    运行结果为:
    8
    12

    为什么会这样呢?相同的数据,只是调整了位置,在内存中的大小却不一样?还有按照常理这两个结果体的大小应该都是1+2+4=7才对呀。
    这就是因为有内存对齐,造成的结果。


    内存对齐对于程序员来说透明的,这是编译器该做的事,将每个数据按排到合适的位置,这也是编译器优化的结果。所以了解内存对齐的原理对于一个程序员写代码是十分必要的,就不会导致大量的内存碎片产生。下面就来讲讲内存对齐的规则吧。

    1、对于结构体的第一个成员,将它在整个结构体在内存中分布的偏移量看成0,以后的每一个数据成员的偏移量必须是 min{#pragma pack()指定的数,这个数据成员的本身的数据长度} 的倍数。
    2、每个数据成员完成在结构体内部对齐的时候,还要进行整个结构体在内存中的对齐,整个结构体的大小为 min{#pragma pack()指定的数,这个结构体中数据长度最大的数据成员的长度} 的倍数。

    #pragram pack(n) 表示的是设置n字节对齐,在VC6中默认是8,所以,我们一般都不用考虑这个,除非我们自己自定义内存对齐。

    通过以上的规则,来解释一下之前的两个例子:

    struct A
    {
    	char a;
        short b;
       	int c;
    };
    
    struct B
    {
        short b;
        int c;
       	char a;
    };
    

    对于结构体 A
    a的长度为1字节,偏移量为0;b的长度为2,它的偏移量应该是2的倍数,之前加起来的数据大小总和为1字节,所以a后面要有一字节的空;c的长度为4字节,偏移量应该是4的倍数,之前的数据大小总和为1+1+2=4字节,刚好是4的倍数,在结构体内部的大小总和为8。再进行结构体的对齐,结构体数据长度最大是4,要是4的倍数,8刚好就是4的倍数,所以结果为8。

    对于结构体B
    b的长度为2字节,偏移量为0;c的长度为4,它的偏移量应该是4的倍数,之前加起来的数据大小总和为2字节,所以b后面要有2字节的空位;a的长度为1字节,偏移量应该是1的倍数,之前的数据大小总和为2+2+4=8字节,是1的倍数,在结构体内部的大小总和为9。再进行结构体的对齐,结构体数据长度最大是4,要是4的倍数,但9不是4的倍数,所以结果为12。

    为什么要进行内存对齐?

    一、硬件原因:加快CPU访问的速度
    我们大多数人在没有搞清楚CPU是如何读取数据的时候,基本都会认为CPU是一字节一字节读取的,但实际上它是按照块来读取的,块的大小可以为2,4,8,16。块的大小也称为内存读取粒度。
    假设CPU没有内存对齐,要读取一个4字节的数据到一个寄存器中,(假设读取粒度为4),则会出现两种情况
    1、数据的开始在CPU读取的0字节处,这刚CPU一次就你能够读取完毕
    2、数据的开始没在0字节处,假设在1字节处吧,CPU要先将0~3字节读取出来,在读取4~7字节的内容。然后将0~3字节里的0字节丢弃,将4~7字节里的5,6,7字节的数据丢弃。然后组合1,2,3,4的数据。
    由此可以看出,CPU读取的效率不是很高,可以说比较繁琐。
    但如果有内存对齐的话:
    由于每一个数据都是对齐好的,CPU可以一次就能够将数据读取完成,虽然会有一些内存碎片,但从整个内存的大小来说,都不算什么,可以说是用空间换取时间的做法。
    二、平台原因:
    不是所有的硬件平台都可以访问任意地址上的任意数据,某些硬件平台只能在某些地址处取某些类型的数据,否则抛出硬件异常。

    展开全文
  • windows内存诊断工具有什么作用

    千次阅读 2021-05-26 05:23:15
    内存可以说是电脑的重灾区,很多电脑问题都跟内存有关。内存稍微有点问题都有可能导致系统运行不稳定,最常见的表现就是蓝屏,自动重启,甚至开不起机。如果是开不起机的话反倒好解决,一般把它拔出来清理下装回去就...

    内存可以说是电脑的重灾区,很多电脑问题都跟内存有关。内存稍微有点问题都有可能导致系统运行不稳定,最常见的表现就是蓝屏,自动重启,甚至开不起机。如果是开不起机的话反倒好解决,一般把它拔出来清理下装回去就搞定了。如果最近你的电脑用起来不太稳定,经常无故蓝屏重启等等,又不知道是不是内存条引起的,这里告诉大家一个方法, 可以快速做出判断。

    1、它就是系统自带的内存诊断功能,我们先打开控制面板,如下图。

    8074e1ce6208935fd3043f674e1b83cb.png

    2、打开里面的“管理工具”。

    d163ea604a50e095e16ba51e402713af.png

    3、这里就能看到“Windows内存诊断”工具了,打开它

    d3e5ddf842e0f42753a670a1ba07205e.png

    4、弹出下面窗口,一般我们直接点击“立即重新启动并检查问题”,当然前提是你要先把系统中运行的文件先保存下,以免数据丢失。

    89dbf113ac2cc28f449f4a72d59f1bc8.png

    5、重启电脑后系统会自动检测,下面就是检测画面,我们主要看下面的状态,如果它一直显示“尚未检测到问题”,就说明内存是正常的。这个过程会分为两个阶段,下面这个是第一阶段。

    b95c762a1692585592d91312ff2f1dab.png

    6、下面已经检测到第二阶段了,如果一直检测到100%都没有问题话,说明你的内存条是正常的。

    d46a2bd28a02a3e44e190be49627abda.png

    检测完成后电脑会重启进入系统。如果检测结果正常,但是电脑还是经常会蓝屏重启,说明是其他地方出了问题,系统和硬盘的可能性比较大,要重点排查。

    以上所述是小编给大家介绍的windows内存诊断工具,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

    展开全文
  • Java虚拟机主要分为以下几个区: 方法区 有时候也成为永久代,在该区内很少发生垃圾回收,但是并不代表不发生GC,在这里进行的GC主要是对方法区里的常量池和对...虚拟机栈也就是我们平常所称的栈内存,它为java方法.

    在这里插入图片描述
    Java虚拟机主要分为以下几个区:

    方法区

    1. 有时候也成为永久代,在该区内很少发生垃圾回收,但是并不代表不发生GC,在这里进行的GC主要是对方法区里的常量池和对类型的卸载
    2. 方法区主要用来存储已被虚拟机加载的类的信息、常量、静态变量和即时编译器编译后的代码等数据
    3. 该区域是被线程共享的
    4. 方法区里有一个运行时常量池,用于存放静态编译产生的字面量和符号引用。该常量池具有动态性,也就是说常量并不一定是编译时确定,运行时生成的常量也会存在这个常量池中

    虚拟机栈

    1. 虚拟机栈也就是我们平常所称的栈内存,它为java方法服务,每个方法在执行的时候都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接和方法出口等信息
    2. 虚拟机栈是线程私有的,它的生命周期与线程相同
    3. 局部变量表里存储的是基本数据类型、returnAddress类型(指向一条字节码指令的地址)和对象引用,这个对象引用有可能是指向对象起始地址的一个指针,也有可能是代表对象的句柄或者与对象相关联的位置;局部变量所需的内存空间在编译器间确定
    4. 操作数栈的作用主要用来存储运算结果以及运算的操作数,它不同于局部变量表通过索引来访问,而是压栈和出栈的方式
    5. 每个栈帧都包含一个指向运行时常量池中该栈帧所属方法的引用,持有这个引用是为了支持方法调用过程中的动态连接.动态链接就是将常量池中的符号引用在运行期转化为直接引用

    本地方法栈

    本地方法栈和虚拟机栈类似,只不过本地方法栈为Native方法服务

    Java堆是所有线程所共享的一块内存,在虚拟机启动时创建,几乎所有的对象实例都在这里创建,因此该区域经常发生垃圾回收操作

    程序计数器

    内存空间小,字节码解释器工作时通过改变这个计数值可以选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理和线程恢复等功能都需要依赖这个计数器完成;该内存区域是唯一一个java虚拟机规范没有规定任何OOM情况的区域

    展开全文
  • 面试官:说说什么是 Java 内存模型(JMM)?

    万次阅读 多人点赞 2021-05-05 23:23:20
    本文禁止转载 1. 为什么要有内存模型...在面试中,面试官经常喜欢问:『说说什么是Java内存模型(JMM)?』 面试者内心狂喜,这题刚背过:『Java内存主要分为五大块:堆、方法区、虚拟机栈、本地方法栈、PC寄存器,ba.
  • c++内存作用和优势

    千次阅读 2016-08-20 11:31:53
    C/C++下内存管理是让几乎每一个程序员头疼的问题,分配足够的内存、追踪内存的分配、在不需要的时候释放内存——这个任务相当复杂。而直接使用系统调用malloc/free、new/delete进行内存分配和释放,有以下弊端:  1...
  • 什么是对齐,以及为什么要对齐:  现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问,这就需要各...
  • 文件内存映射(一):它是什么

    千次阅读 2019-09-18 06:30:27
    在综合考虑各方面的因素后,在技术选择上选择了 -- 《文件内存映射》。所以接下来想用几部分来介绍这个技术。一.它是一种文件操作的方式,由操作系统支持有人可能会觉得上一句的后半部分有点废话,但我觉得却是必须....
  • 什么是内存泄漏?有什么危害

    千次阅读 多人点赞 2019-04-18 11:31:56
    1、什么是内存泄漏 内存泄漏是指你向系统申请分配内存进行使用(new/malloc),然后系统在堆内存中给这个对象申请一块内存空间,但当我们使用完了却没有归系统(delete),导致这个不使用的对象一直占据内存单元,...
  • 什么是Java内存模型?

    千次阅读 2018-03-17 00:00:00
    本文转载自公众号 占小狼的博客说”JVM内存模型“,有人会说是关于JVM内存分布(堆栈,方法区等)这些介绍,也有地方说(深入理解JVM虚拟机)上说Java内存模型是JVM的抽象模型(主内存,本地内存)。这两个到底怎么...
  • 问:为什么要动态分配内存 答1:因为内存太宝贵。 答2:如果全部是静止内存不能释放,对于小的程序可以运行完毕。但是对于大的程序,还没运行完,内存就要被占用完,此时就要发生内存泄露。 答3:给定一个占用...
  • 内存管理的概念及作用

    千次阅读 2018-05-25 13:34:26
    操作系统对内存的划分和动态分配,就是内存管理的概念。有效的内存管理在多道程序设计中非常重要,不仅方便用户使用存储器、提高内存利用率,还可以通过虚拟技术从逻辑上扩充存储器。内存管理的功能:1.内存空间的...
  • 虚拟内存作用

    千次阅读 2017-05-30 17:40:37
    虚拟内存是计算机系统内存管理的一种技术。别称虚拟存储器(Virtual Memory)。 它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分...
  • 在C语言中,指针变量的值就是一个内存地址,&运算符的作用也是取变量的内存地址,请看下面的代码: #include #include int a = 1, b = 255;int main(){ int *pa = &a; printf("pa = %#X, &b = %#X\n", pa, &b);...
  • 原标题:内存和外存的主要区别之处竟是在这里!内存:也称为内存储器、主存储器,简称为内存。它是计算机的重要的组成部分,也是我们前面说的计算机的大脑的主要部分。内存由高速半导体存储器芯片组成,是计算机运行...
  • 操作系统虚拟内存作用概括

    千次阅读 2016-10-14 17:41:28
    其次,虚拟内存主要目的不是为了增加“物理内存”,而是将内存中一段时间不用的数据暂时的转移到磁盘或其他介质上去,从而为其他新的数据腾出内存空间。当被转移出去的数据需要用的时候再移回内存中来。主要技术就是...
  • 内存中栈和堆的作用和区别

    千次阅读 2019-02-26 17:16:49
    首先内存中的堆栈和数据结构中的堆栈是不同的两个东西。 内存中分为栈和堆,以及静态存储区、程序代码区等。   内存模型:   从空间上和存放内容上来说: 栈:内存空间小一些,栈的内存要远远小于堆内存,...
  • JavaScript,会在创建变量(对象,字符串等)时分配内存,并且在不再使用它们时“自动”释放内存,这个自动释放内存的过程称为垃圾回收。 因为自动垃圾回收机制的存在,让大多Javascript开发者感觉他们可以不关心...
  • 什么是虚拟内存

    万次阅读 多人点赞 2016-03-10 20:17:46
    虚拟内存是计算机系统内存管理的一种技术。 它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时...
  • 面试题:请解释一下什么是虚拟内存

    千次阅读 多人点赞 2019-09-16 16:39:35
    内存对于用户来说就是一个字节数组,我们可以根据地址来访问到某个字节或者某些字节:很久之前的内存很久很久之前,一台机器上只放置一个程序,操作系统仅仅作为一个函数库存在。对于...
  • js内存释放和作用域销毁

    千次阅读 2019-01-15 11:26:39
    内存 对象或者函数(引用数据类型) 在定义的时候都会开辟一个堆内存,堆内存有一个引用地址,如果外面有变量引用了这个地址,我们就说这个内存被占用了,不能被销毁了。如果想要销毁堆内存,将所有引用这个堆...
  • 一文理解内存屏障

    千次阅读 多人点赞 2019-05-15 14:40:20
    内存屏障是硬件之上、操作系统或JVM之下,对并发作出的最后一层支持。再向下是是硬件提供的...接下来,阐述问题的产生原理,了解为什么需要内存屏障;然后,浅谈内存屏障的标准、厂商对内存屏障的支持,并以volat...
  • 闭包为什么会造成内存泄漏?

    万次阅读 多人点赞 2019-03-07 23:53:41
    想要理解闭包,必须从理解函数被【调用】的时候会发生什么入手。 每次复习闭包的相关知识,我都习惯把作用域和闭包一起复习。 函数的作用域链 1.创建函数outerFun()时,会创建一个预先包含全局变量对象的作用域...
  • 什么内存对齐

    千次阅读 2016-07-22 23:40:43
     现在我就来说一说为什么内存对齐以及怎么个对齐法(如何对齐)?  首先来谈谈什么内存对齐!!我百度了一下如下解释: 内存对齐:  内存对齐”应该是编译器的“管辖范围”。编译器为程序中的每个“数据单元...
  • 什么是闭包? 能够访问其他函数内部变量的函数 闭包解决了什么问题 由于变量的作用域的原因-----(函数内部能读取全局变量,函数外部无法读取函数内部的变量【局部变量】),为了在函数外部读取局部变量,所以就有了...
  • 全面理解Java内存模型(JMM)及volatile关键字

    万次阅读 多人点赞 2017-06-12 11:25:05
    对JMM进行较为全面的分析,本篇的写作思路是先阐明Java内存区域划分、硬件内存架构、Java多线程的实现原理与Java内存模型的具体关系,在弄明白它们间的关系后,进一步分析Java内存模型作用以及一些必要的实现手段,...
  • C++ 中内存对齐原理及作用

    千次阅读 多人点赞 2018-01-07 16:54:46
    struct/class/union内存对齐原则有四个:1).数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小或者成员的子成员大小...
  • 理解什么是“大内存页”,如何进行配置,如何查看当前状态以及如何禁用它。本文中我们会详细介绍大内存页huge page,让你能够回答:Linux 中的“大内存页”是什么?在 RHEL6、RHEL7、Ubuntu 等 Linux 中,如何启用/...
  • 以太坊内存池mempool及作用介绍

    千次阅读 2021-12-13 12:30:27
    一、什么是内存内存池是一组以太坊交易,这些交易已经广播到网络并等待被挖掘成一个区块。内存池服务提供对交易生命周期的直接洞察。交易被用户广播到节点后,在内存池中等待。从那里,交易将被挖掘到一个区块...
  • 内存泄漏:由于疏忽或者错误造成程序未能释放已经不再使用的情况,内存泄漏并不是指内存在物理上的错误消失,而是程序分配某段内存后,由于设计错误,丢失了对这段内存的控制,因而造成了内存浪费。 如何进行内存...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,349,992
精华内容 539,996
关键字:

内存作用是什么

友情链接: AntVCprograms.rar