精华内容
下载资源
问答
  • CUDA:核函数中几种变量所属内存的类型 局部变量:存在寄存器中 静态数组:存在本地内存(栈)中 动态变量:存在全局内存中 __shared__(静态):存在共享内存中...

    CUDA:核函数中几种变量所属内存的类型

    局部变量:存在寄存器中
    静态数组:存在本地内存(栈)中
    动态变量:存在全局内存中
    __shared__(静态):存在共享内存中

    展开全文
  • 内存类型

    千次阅读 2004-12-28 09:11:00
    内存所采用的内存类型,不同类型的内存传输类型各有差异,在传输率、工作频率、工作方式、工作电压等方面都有不同。目前市场中主要有的内存类型有SDRAM、DDR SDRAM和RDRAM三种,其中DDR SDRAM内存占据了市场主流...
     指内存所采用的内存类型,不同类型的内存传输类型各有差异,在传输率、工作频率、工作方式、工作电压等方面都有不同。目前市场中主要有的内存类型有SDRAM、DDR SDRAM和RDRAM三种,其中DDR SDRAM内存占据了市场的主流,而SDRAM内存规格已不再发展,处于被淘汰的行列。RDRAM则始终未成为市场的主流,只有部分芯片组支持,而这些芯片组也逐渐退出了市场,RDRAM前景并不被看好。
    

        SDRAM:SDRAM,即Synchronous DRAM(同步动态随机存储器),曾经是PC电脑上最为广泛应用的一种内存类型,即便在今天SDRAM仍旧还在市场占有一席之地。既然是“同步动态随机存储器”,那就代表着它的工作速度是与系统总线速度同步的。SDRAM内存又分为PC66、PC100、PC133等不同规格,而规格后面的数字就代表着该内存最大所能正常工作系统总线速度,比如PC100,那就说明此内存可以在系统总线为100MHz的电脑中同步工作。
    与系统总线速度同步,也就是与系统时钟同步,这样就避免了不必要的等待周期,减少数据存储时间。同步还使存储控制器知道在哪一个时钟脉冲期由数据请求使用,因此数据可在脉冲上升期便开始传输。SDRAM采用3.3伏工作电压,168Pin的DIMM接口,带宽为64位。SDRAM不仅应用在内存上,在显存上也较为常见。

        DDR SDRAM:严格的说DDR应该叫DDR SDRAM,人们习惯称为DDR,部分初学者也常看到DDR SDRAM,就认为是SDRAM。DDR SDRAM是Double Data Rate SDRAM的缩写,是双倍速率同步动态随机存储器的意思。DDR内存是在SDRAM内存基础上发展而来的,仍然沿用SDRAM生产体系,因此对于内存厂商而言,只需对制造普通SDRAM的设备稍加改进,即可实现DDR内存的生产,可有效的降低成本。

        SDRAM在一个时钟周期内只传输一次数据,它是在时钟的上升期进行数据传输;而DDR内存则是一个时钟周期内传输两次次数据,它能够在时钟的上升期和下降期各传输一次数据,因此称为双倍速率同步动态随机存储器。DDR内存可以在与SDRAM相同的总线频率下达到更高的数据传输率。

        与SDRAM相比:DDR运用了更先进的同步电路,使指定地址、数据的输送和输出主要步骤既独立执行,又保持与CPU完全同步;DDR使用了DLL(Delay Locked Loop,延时锁定回路提供一个数据滤波信号)技术,当数据有效时,存储控制器可使用这个数据滤波信号来精确定位数据,每16次输出一次,并重新同步来自不同存储器模块的数据。DDL本质上不需要提高时钟频率就能加倍提高SDRAM的速度,它允许在时钟脉冲的上升沿和下降沿读出数据,因而其速度是标准SDRA的两倍。

        从外形体积上DDR与SDRAM相比差别并不大,他们具有同样的尺寸和同样的针脚距离。但DDR为184针脚,比SDRAM多出了16个针脚,主要包含了新的控制、时钟、电源和接地等信号。DDR内存采用的是支持2.5V电压的SSTL2标准,而不是SDRAM使用的3.3V电压的LVTTL标准。

        RDRAM:RDRAM(Rambus DRAM)是美国的RAMBUS公司开发的一种内存。与DDR和SDRAM不同,它采用了串行的数据传输模式。在推出时,因为其彻底改变了内存的传输模式,无法保证与原有的制造工艺相兼容,而且内存厂商要生产RDRAM还必须要加纳一定专利费用,再加上其本身制造成本,就导致了RDRAM从一问世就高昂的价格让普通用户无法接收。而同时期的DDR则能以较低的价格,不错的性能,逐渐成为主流,虽然RDRAM曾受到英特尔公司的大力支持,但始终没有成为主流。

        RDRAM的数据存储位宽是16位,远低于DDR和SDRAM的64位。但在频率方面则远远高于二者,可以达到400MHz乃至更高。同样也是在一个时钟周期内传输两次次数据,能够在时钟的上升期和下降期各传输一次数据,内存带宽能达到1.6Gbyte/s。

        普通的DRAM行缓冲器的信息在写回存储器后便不再保留,而RDRAM则具有继续保持这一信息的特性,于是在进行存储器访问时,如行缓冲器中已经有目标数据,则可利用,因而实现了高速访问。另外其可把数据集中起来以分组的形式传送,所以只要最初用24个时钟,以后便可每1时钟读出1个字节。一次访问所能读出的数据长度可以达到256字节。

    展开全文
  • 二、内存的分配及内存错误类型1.内存的分配方式内存分配方式有三种:(1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。(2)在栈上创建...

    二、内存的分配及内存错误类型

    1.内存的分配方式

    内存分配方式有三种:

    1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。

    2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。

    3)从堆上分配,亦称动态内存分配。程序在运行的时候用mallocnew申请任意多少的内存,程序员自己负责在何时用freedelete释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多。

    2.newdelete/mallocfree

    mallocfreeC++/C语言的标准库函数,new/deleteC++的运算符。它们都可用于申请动态内存和释放内存。

    对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free

    因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数,而是C++的运算符。

    newdeletemallocfree混在一起用也是个坏想法。对一个用new获取来的指针调用free,或者对一个用malloc获取来的指针调用delete,理论上是可以的,但其后果是不可预测的。大家都知道不可预测的意思:它可能在开发阶段工作良好,在测试阶段工作良好,但也可能会最后在你最重要的客户的脸上爆炸。

    3.deletefree对指针做了什么

    大家都知道deletefree都是释放内存的,但是释放的内存是谁的内存?是指针变量在内存中的空间还是指针变量指向的内存?这个大家一定要弄清楚,答案是后者。

    char *p = (char *) malloc(100);

        strcpy(p, hello);

        free(p);        // p 所指的内存被释放,但是p所指的地址仍然不变

                        // 释放的概念只是一种对该段内存unlock,而并不是删掉p中所存储的地址值

       

        if(p != NULL)   // 没有起到防错作用,因为p是有值的

        {

           strcpy(p, world);  // 出错

    }

    这里有很重要的两个原则:

    1)指针消亡了,并不表示它所指的内存会被自动释放。

    2)内存被释放了,并不表示指针会消亡或者成了NULL指针

    因此,一旦我们用了newmalloc申请了空间,切记要用deletefree进行释放之;一旦用deletefree将动态申请的内存释放了,一定不要忘了将指针变量赋值为Null

    PS:如果申请的空间是一个动态数组,用delete释放的时候切记要在delete后面加上[],否则delete只会释放数组的第一个元素的空间,后面的都不会被释放掉,造成内存泄露。

    4.动态内存不释放会怎么样

    很多初学指针的人在用new/malloc申请空间后经常会忘记将空间delete/free而且从效果上来看也没什么甚至会认为系统会自动释放,看下例:

    void main(void)

    {

        float *p = NULL;

        while(TRUE)

        {

            p = new float[1000000];

            cout << eat more memory << endl;

        }

    }

    这段程序运行一下,明显是一个无限循环,典型的只有new而没有delete的情况,找一个内存监控软件查看一下内存损失情况就明白了。如果强行Ctrl+C终止程序,然后关掉VC会怎么样?申请的空间会释放吗?答案是不会,一定不会!

    有时我们为确保安全性喜欢将程序这样写:

    void main(void)

    {

        float *p = NULL;

        while(TRUE)

        {

            p = new float[1000000];

            cout << eat memory << endl;

            if(p==NULL)

                exit(1);

        }

    }

    看上去很好,即申请不成功(即内存被全部吃掉)就会调用exit1)而将该“坏”程序杀掉,这样有用吗?不一定。

        在32位系统中,操作系统支持“虚存”,内存用完了,自动用硬盘空间顶替。所以,我们在写程序动态申请内存的时候一定要注意这方面的问题。

    展开全文
  • java中基本数据类型和引用数据类型以及它们存储方式堆内存和栈内存

      一直对java中的基本数据类型和引用数据类型之间的关系搞不太清楚,今天做leetcode的一道题目,总算弄清楚了关系。写下来和大家一起分享一下。


      一 基本数据类型

     数据类型在计算机语言里面,是对内存位置的一个抽象表达方式,可以理解为针对内存的一种抽象的表达方式。基本类型:简单数据类型是不能简化的、内置的数据类型、由编程语言本身定义,它表示了真实的数字、字符和整数。在java中基本数据类型一共有8种,包括

    byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0;

    short:短整型,在内存中占16位,即2个字节,取值范围-32768~32717,默认值0;

    int:整型,用于存储整数,在内在中占32位,即4个字节,取值范围-2147483648~2147483647,默认值0;

    long:长整型,在内存中占64位,即8个字节-2^63~2^63-1,默认值0L;

    float:浮点型,在内存中占32位,即4个字节,用于存储带小数点的数字(与double的区别在于float类型有效小数点只有6~7位),默认值0;

    double:双精度浮点型,用于存储带有小数点的数字,在内存中占64位,即8个字节,默认值0;

    char:字符型,用于存储单个字符,占16位,即2个字节,取值范围0~65535,默认值为空;

    boolean:布尔类型,占1个字节,用于判断真或假(仅有两个值,即true、false),默认值false;


      二 引用数据类型

     引用数据类型:Java语言本身不支持C++中的结构(struct)或联合(union)数据类型,它的复合数据类型一般都是通过类或接口进行构造,类提供了捆绑数据和方法的方式,同时可以针对程序外部进行信息隐藏。引用数据类型分3种:类,接口,数组;

     三 数据类型与内存的关系

      java把内存分为两种,一种是堆内存,一种是栈内存。

      基本类型类型以及对象的引用变量是存储在栈内存中,当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间,该内存空间可以立刻被另作他用。

      而对象本身的值或者说new创建的对象和数组是存储在堆内存中。在堆中分配的内存,由java虚拟机自动垃圾回收器来管理。在堆中产生了一个数组或者对象后,还可以在栈中定义一个特殊的变量(对象的引用变量),这个变量的取值等于数组或者对象在堆内存中的首地址,在栈中的这个特殊的变量就变成了数组或者对象的引用变量,以后就可以在程序中使用栈内存中的引用变量来访问堆中的数组或者对象,引用变量相当于为数组或者对象起的一个别名,或者代号。

      数组和对象在没有引用变量指向它的时候,才变成垃圾,不能再被使用,但是仍然占着内存,在随后的一个不确定的时间被垃圾回收器释放掉。这个也是java比较占内存的主要原因,实际上,栈中的变量指向堆内存中的变量,这就是 Java 中的指针!

      找了一个图,可以更形象的描述它们之间的关系。

      


      四 java中内存分配策略

      按照编译原理的观点,程序运行时的内存分配有三种策略:静态的,栈式的,堆式的。
      
      静态存储分配是指在编译时就能确定每个数据目标在运行时刻的存储空间需求,因而在编译时就可以给他们分配特定的存储空间。静态存储分配要求程序中不允许有可变数据结构的存在(比如数组,链表),也不允许有嵌套或者递归的结构出现,因为它们会导致编译程序无法计算准确的存储空间需求。

      栈式分配(动态存储分配)是由一个类似于堆栈的运行栈来实现的。在栈式存储方案中,程序对数据区的需求在编译时是完全未知的,只有到运行的时候才能够知道,但是规定在运行中进入一个程序模块时,必须知道该程序模块所需的数据区大小才能够为其分配内存.和我们在数据结构所熟知的栈一样,栈式存储分配按照先进后出的原则进行分配。 

      静态存储分配要求在编译时能知道所有变量的存储要求,栈式存储分配要求在过程的入口处必须知道所有的存储要求,而堆式存储分配则专门负责在编译时或运行时模块入口处都无法确定存储要求的数据结构的内存分配,比如可变长度串和对象实例.堆由大片的可利用块或空闲块组成,堆中的内存可以按照任意顺序分配和释放. 


      五 java中的堆和栈  

      栈与堆都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。 

      Java的堆是一个运行时数据区,类的(对象从中分配空间。这些对象通过new、newarray、anewarray和multianewarray等指令建立,它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。 

      栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类型的变量(,int, short, long, byte, float, double, boolean, char)和对象句柄。 

    展开全文
  • 1. 值类型的数据存储在内存的栈中;引用类型的数据存储在内存的堆中,而内存单元中只存放堆中对象的地址。 2. 值类型存取速度快,引用类型存取速度慢。 3. 值类型表示实际数据,引用类型表示指向存储在内存堆中的...
  • 首先说一句,不论是基本数据类型还是引用类型,他们都会...基本数据类型不存在“引用”概念,他们直接存储在内存的内存栈上,数据本身值也是存储在栈空间里面; 引用类型继承于 Object 类,Object 类都是按...
  • 这两个的内存地址按照道理来说应该不是一个。 那么为啥他们用 “==” 比较,还会返回true? public class AAA { int tc=1231; void compare(){ int t1=1231; System.out.println(t1==tc); } ...
  • C语言基本类型变量的内存分配和指针内存分配方式对比(int类型) 本文是学了数据结构之后,对 “int * & a ; ”这种类型变量深入了解,同时也温习了很久之前学过C语言知识。如果有不得当地方,希望大家...
  • C++ STL容器类型的内存释放

    千次阅读 2018-05-31 15:45:28
    C++ 大部分STL容器类型不会随着生命周期结束而自动释放内存,接下来将依次对其说明:1. vector 类型经测试,直到C++11vector类型,用clear或者erase都无法释放内存,只有显示调用swap:std::vector&lt;T&...
  • 共享内存传递结构体类型的数据

    千次阅读 2018-03-01 16:15:05
    一、firstprocess // #include #include #include #include #define BUF_SIZE 256 TCHAR szName[]=TEXT("Global\\MyFileMappingObject"); TCHAR szMsg[]=TEXT("Message from first...共享内存传递结构体类型的数据
  • 这里的这个地址其实就是内存的某个字节的编号。而这个编号的确定是与地址总线有关。如果地址总线是32位,则它的寻址范围是0~2^32(0~4G)。那么为一个字节的编址就会由32个0或者1组成。例如第一个字节的编址是32个0...
  • 内存类型说明

    千次阅读 2011-07-30 13:38:15
    1、DDR代表是1代内存、DDR2代表是2代内存、...2、金士顿 512M DDR 400 台式机内存的“400”是频率的意思!常用内存频率有266、333、400、533、667、800、1066……等频率。频率越高,速度越快! 3、内存最好要使用同型
  • PHP对象类型内存分配

    千次阅读 2016-10-13 16:21:59
    对像类型在PHP 里面和整型、浮点型、字符串型一样,也是一种数据类型,都是存储不同类型数据用的, 在运行的时候都要加载到内存中去用,那么对象在内存里面...每段内存的特点如下。    1.栈空间段(栈内存)  栈(s
  • java引用类型所占用的内存空间

    万次阅读 2015-08-14 15:18:29
    Question:JAVA中的引用的内存分配大小是多少? 如,我声明了一个对象,它在栈...java规范中并没有强行定义虚拟机中任何一种类型在虚拟机中所占用内存的具体大小,但是规范规定了每种类型的取值范围。从这种角度上
  • erlang 各种数据类型占用的内存大小

    千次阅读 2013-12-03 20:51:16
    用erlang话讲,深入了解erlang不同数据类型所占的内存空间大小,是erlang高效编程一个良好开始。一个程序要运行,就要先描述其算法。描述一个算法应先说明算法中要用数据,数据以变量或常量形式来描述。每个...
  • int类型内存存储方式

    万次阅读 多人点赞 2015-12-08 01:57:00
    Q1:int类型内存中是以何种方式存储? 要解决这个问题,我们需要首先比较深入地理解下int类型。 { 本文中int类型的相关数据,如无特别说明都以32位操作系统下VC++6.0编译器环境为准。 在下表中可以看到,int...
  • 参考文章 用sys包中sys.getsizeof(数据类型)查看内存大小 输出结果单位是byte
  • 为了提高运算效率,对内存空间进行了不同划分(一共有5种)——因此,每一片区域都有特定处理数据方式和内存管理方式。栈内存存储局部变量,当数据使用完毕,空间会自动释放。堆内存 对象和数组,通过new建立...
  • java中引用类型的数据,传递内存地址,像类,数组,接口,String等等都是引用类型!看下面代码和截图!public class Test2 { // java中引用类型的数据传递内存地址 private Map&lt;String, Student&...
  • Java基本类型占用的内存大小

    千次阅读 2019-02-26 21:45:26
    一、基本数据类型 一个byte是8位。 在Java中,一个字符是2个byte字节,一个byte等于8 bit。 在Java中,boolean被当成int处理,所以4个字节。 二、一个空对象占用多少个字节? 对于32位JDK: new一个Object对象...
  • Java内存管理-你真理解Java中数据类型吗(十)

    千次阅读 多人点赞 2019-04-06 21:23:43
    但是不管是那种数据类型最终存储都要到内存中,本文由浅入深对数据类型进行介绍和讲解,相信读完本文你一定会有收获,会对Java数据类型有更深了解和认识! 本文地图 一、什么是位、字节、字符、字符集 位(bit...
  • 内存屏障四种类型

    千次阅读 2018-09-05 16:20:20
    在Load2要读取数据被访问前,保证Load1要读取数据被读取完毕。   StoreStore屏障: 抽象场景:Store1; StoreStore; Store2 Store1 和 Store2代表两条写入指令。在Store2写入执行前,保证Store1...
  • 分配:内存的分配是由程序完成的,程序员需要通过关键字new为每个对象申请内存空间(基本类型除外),所有的对象都在堆(Heap)中分配空间。 释放:对象的释放是由垃圾回收机制决定和执行的,这样做确实简化了程序员的...
  • 内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据。 因此,通过定义不同类型的变量,可以在内存中储存整数、小数或者字符。 Java中有两大类型 内置数据类型(基本数据类型) ...
  • 枚举类型占用的内存空间

    千次阅读 2011-08-01 21:00:00
    enum Days{sunday,monday,tuesday,wednesday,thursday,friday,saturday};(申明枚举类型) enum day;(定义枚举类型) ...请问变量day占有多大的内存空间? 答:sunday是符号常量,其值是0,其余依次类
  • 一 c语言基本类型 整型int 长整型long 单精度型float 双精度型double 字符类型char 空类型void 二 各个类型所占字节数 使用sizeof()函数测试一下。下面给出我编译环境、 测试代码和测试结果: #include<stdio.h...
  • 类型的数据存储在内存的栈中;引用类型的数据存储在内存的堆中,而内存单元中只存放堆中对象的地址。2. 值类型存取速度快,引用类型存取速度慢。3. 值类型表示实际数据,引用类型表示指向存储在内存堆中的数据...
  • python中 int类型的数占据内存的大小

    千次阅读 2019-05-25 22:56:09
    以python3版本为例说明, int 类型在python中是动态长度。因为python3中int类型是长整型,理论支持无限大数字,但它结构其实也很简单, 在 longintepr.h 中定义: struct _longobject { PyObject_VAR_HEAD ...
  • byte:Java中最小数据类型,在内存中占1个字节(8 bit),取值范围-128~127,默认值0 short:短整型,2个字节(16 bit),取值范围-32768~32717,默认值0 int:整型,用于存储整数,在内存中占4个字节,取值...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 128,786
精华内容 51,514
关键字:

内存的类型