内存

作者: 天涯_DHY | 来源:发表于2017-03-21 09:02 被阅读0次

栈区:

存储的数据只在函数内有效,超出函数就消失了。在栈区程序员可以为某个内存单元命名。

堆区:

堆区可以存储比较大的数据,而且存储的数据只要不是程序员手动将其释放,那么就会永远保存在堆区中。堆是一大堆不连续的内存区域,在系统中由链表将他们串接起来,堆区中的内存单元都是匿名的,不可以被命名,所以使用堆区的空间需要用指针记录该内存单元的地址,然后通过指针去访问。

在C++中,使用new创建一个堆并分配内存,在new后面跟一个要分配的对象类型,编译器根据这个类型来分配内存。如:

int *p = new int;//在堆区创建一个int类型的内存区域,将地址赋给指针p,这块内存区域为4字节。

delete p;//回收内存区域

由于使用new创建的内存空间不会被系统自动释放,因此假如你不去释放它,那么该区域的内存就永远不能为其他数据所使用。而指向该内存区域的指针是个局部变量,当定义该指针的函数结束并返回时,指针也就消失了,那么如果不记得该内存地址,就再也无法访问该内存区域,就好像丢失了这块内存一样,这种情况叫做内存泄漏。

注意:由于计算机的内存是有限的,因此可能会出现没有足够的内存而无法满足new的请求。在这种情况下,new会返回0,该值被赋给指针后,指针就是一个空指针。空指针不会指向任何有效数据。new除了返回空值以外还会引发异常。

全局区:

保存的数据只有程序运行结束才会释放,而且很容易被修改。

相关文章

  • Linux 内存管理 应用篇

    1、物理内存和虚拟内存 物理内存:物理内存就是系统硬件提供的内存大小,是真正的内存 虚拟内存:为了满足物理内存的不...

  • linux io与zero copy

    1. 物理内存与虚拟内存 1.1 物理内存 物理内存指通过物理内存条而获得的内存空间。 1.2 虚拟内存 虚拟内存...

  • 性能优化<第五篇>:内存优化

    1、为什么要内存优化? 2、了解内存中的内容 3、内存上限 4、GC内存回收机制 5、内存泄漏、内存抖动、内存溢出...

  • JVM第二天-volatile final synchroniz

    1.JAVA内存模型 简单的讲,Java 内存模型将内存分为共享内存和本地内存。共享内存又称为堆内存,指的就是线程...

  • 伙伴算法和slab算法

    0. 内存管理问题 内存碎片太小和管理内存碎片的效率问题 内存碎片:回收内存时,将内存块放入free链表中。因内存...

  • JVM 常见内容汇总

    面试题 对象 对象的创建 分配内存 对象头 内存溢出 内存溢出与内存泄漏 内存溢出:系统无法再分配内存空间。 内存...

  • java内存模型

    1.内存模型(JMM) 1.1什么是Java内存模型? Java内存模型将内存分为主内存和工作内存两大部分;主内存...

  • 变量提升

    堆内存 & 栈内存 JS中的内存一共两种:堆内存和栈内存 堆内存 作用:用来存储引用数据类型值的内存空间叫做堆内存...

  • 物理内存和虚拟内存

    物理内存 物理内存是真实的内存大小,即内存条内存大小 虚拟内存 虚拟内存是为了满足系统对超出物理内存容量的需求时在...

  • 5、哪些情况下会导致oom问题?

    1、根据java的内存模型会出现内存溢出的内存有堆内存、方法区内存、虚拟机栈内存、native方法区内存;2、一般...

网友评论

      本文标题:内存

      本文链接:https://www.haomeiwen.com/subject/mkfjpttx.html