精华内容
下载资源
问答
  • 通常代码区是可共享的(即另外的执行程序可以调用它),使其可共享的目的是对于频繁被执行的程序,需要在内存中有一份代码即可。代码区通常是只读的,使其只读的原因是防止程序意外地修改了它的指令。另外,代码区还...

    1 代码区

    存放 CPU 执行的机器指令。通常代码区是可共享的(即另外的执行程序可以调用它),使其可共享的目的是对于频繁被执行的程序,只需要在内存中有一份代码即可。代码区通常是只读的,使其只读的原因是防止程序意外地修改了它的指令。另外,代码区还规划了局部变量的相关信息。

    总结:你所写的所有代码都会放入到代码区中,代码区的特点是共享和只读。

    2 全局区

    全局区中主要存放的数据有:全局变量、静态变量、常量(如字符串常量)

    全局区的叫法有很多:全局区、静态区、数据区、全局静态区、静态全局区

    这部分可以细分为data区和bss区

    2.1 data区

    data区里主要存放的是已经初始化的全局变量、静态变量和常量

    2.2 bss区

    bss区主要存放的是未初始化的全局变量、静态变量,这些未初始化的数据在程序执行前会自动被系统初始化为0或者NULL

    2.3 常量区

    常量区是全局区中划分的一个小区域,里面存放的是常量,如const修饰的全局变量、字符串常量等

    在VS下运行结果如下:

    ef2cb597dda704b22ef804ec7bdc5fd9.png
    20b6c057019a2ce10f01a9b22e96e6d5.png
    27fbb790999ad2747c2f5b71efb9d0f0.png

    总结:全局区存放的是全局变量、静态变量和常量

    在程序运行后由产生了两个区域,栈区和堆区

    3 栈区(stack)

    栈是一种先进后出的内存结构,由编译器自动分配释放,存放函数的参数值、返回值、局部变量等。在程序运行过程中实时加载和释放,因此,局部变量的生存周期为申请到释放该段栈空间。

    vs运行效果如下

    2ebcc5b554ce9a53f6cb9376f97c0cef.png
    aa957b05773cef5905a08a8f93dcc002.png

    4 堆区(heap)

    堆是一个大容器,它的容量要远远大于栈,但没有栈那样先进后出的顺序。用于动态内存分配。堆在内存中位于BSS区和栈区之间。一般由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收。

    vs运行效果如下:

    382928f8c803df0141546416c216a1af.png
    a631d388aebc9ee52535612afeb8364a.png

    当我们把几个案例放在一起执行,就可以看到内存将每个区域划分的很有条理。每个区域互不干涉,区域中的数据地址也是非常接近的

    899fd3f84bce419046447e27cb2e517b.png
    展开全文
  • 通常代码区是可共享的(即另外的执行程序可以调用它),使其可共享的目的是对于频繁被执行的程序,需要在内存中有一份代码即可。代码区通常是只读的,使其只读的原因是防止程序意外地修改了它的指令。另外,代码区还...

    1 代码区

    存放 CPU 执行的机器指令。通常代码区是可共享的(即另外的执行程序可以调用它),使其可共享的目的是对于频繁被执行的程序,只需要在内存中有一份代码即可。代码区通常是只读的,使其只读的原因是防止程序意外地修改了它的指令。另外,代码区还规划了局部变量的相关信息。

    总结:你所写的所有代码都会放入到代码区中,代码区的特点是共享和只读。

    2 全局区

    全局区中主要存放的数据有:全局变量、静态变量、常量(如字符串常量)

    全局区的叫法有很多:全局区、静态区、数据区、全局静态区、静态全局区

    这部分可以细分为data区和bss区

    2.1 data区

    data区里主要存放的是已经初始化的全局变量、静态变量和常量

    2.2 bss区

    bss区主要存放的是未初始化的全局变量、静态变量,这些未初始化的数据在程序执行前会自动被系统初始化为0或者NULL

    2.3 常量区

    常量区是全局区中划分的一个小区域,里面存放的是常量,如const修饰的全局变量、字符串常量等

    在VS下运行结果如下:

    9fe9c819808af1351f1cf3f9ddfa7ecc.png
    bff9fcb71f0680ca652911a2e7e44545.png
    675c099b868af28b7c7e2bd80646dee9.png

    总结:全局区存放的是全局变量、静态变量和常量

    在程序运行后由产生了两个区域,栈区和堆区

    3 栈区(stack)

    栈是一种先进后出的内存结构,由编译器自动分配释放,存放函数的参数值、返回值、局部变量等。在程序运行过程中实时加载和释放,因此,局部变量的生存周期为申请到释放该段栈空间。

    vs运行效果如下

    022b2cc958fbd89f2ce5b835ebd0bbba.png
    c96ed717b0c3d92b84c9b9907d4b78c9.png

    4 堆区(heap)

    堆是一个大容器,它的容量要远远大于栈,但没有栈那样先进后出的顺序。用于动态内存分配。堆在内存中位于BSS区和栈区之间。一般由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收。

    vs运行效果如下:

    8faddbacd4f249b18ac24a13f3777e91.png
    307f07c8eb0ee1a2354fc6e95ab44755.png

    当我们把几个案例放在一起执行,就可以看到内存将每个区域划分的很有条理。每个区域互不干涉,区域中的数据地址也是非常接近的

    d7a1d567d021a999b5d5e69bea6af855.png
    展开全文
  • java中静态变量在内存中的位置

    千次阅读 2019-09-10 14:11:16
    java程序在内存中的存储分配情况:一、堆区: 1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令) 2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,...

    java程序在内存中的存储分配情况:

    一、堆区: 
    1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令) 
    2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身 
    栈区: 
    1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中 
    2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。 
    3.栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。 
    方法区: 
    1.又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。 
    2.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。

     

     

    二、内存分区
    而内存分为四个区:stack segment,heap segment,data segment,code segment;
    stack 区存放函数参数和局部变量;heap  区存放对象;data  区存放static 的变量或者字符串常量; code  区存放类中的方法;
    因此,静态变量是存放在data区的 !

    展开全文
  • 代码段是可共享的,相同的代码在内存中只会有一个拷贝,同时这个段是只读的,防止程序由于错误而修改自身的指令。 初始化数据段(.data):这里存放的是程序中需要明确赋初始值的变量,例如位于所有函数之外的...
    一个典型的Linux C程序内存空间由如下几部分组成:
    代码段(.text):这里存放的是CPU要执行的指令。代码段是可共享的,相同的代码在内存中只会有一个拷贝,同时这个段是只读的,防止程序由于错误而修改自身的指令。

    初始化数据段(.data):这里存放的是程序中需要明确赋初始值的变量,例如位于所有函数之外的全局变量:int val=100。需要强调的是,以上两段都是位于程序的可执行文件中,内核在调用exec函数启动该程序时从源程序文件中读入。

    未初始化数据段(.bss):位于这一段中的数据,内核在执行该程序前,将其初始化为0或者null。例如出现在任何函数之外的全局变量:int sum;

    堆(Heap):这个段用于在程序中进行动态内存申请,例如经常用到的malloc,new系列函数就是从这个段中申请内存。

    栈(Stack):函数中的局部变量以及在函数调用过程中产生的临时变量都保存在此段中。


    展开全文
  • java程序在内存中的存储分配情况:一、堆区: 1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令) 2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,...
  • C++内存模型

    2021-04-16 17:03:47
    内存分区模型 C++程序在执行时,将内存分为4个区域 1 代码区 存放函数的二进制代码 由操作系统进行管理的 放的是二进制 2 全局区 存放全局变量和静态...代码区是共享的:因为对于频繁执行的程序,只要在内存中有一份代
  • 指令格式

    2021-03-23 13:41:41
    假设指令内存中是依次存放的: 那么这样的指令还能再优化吗? 当然能,改变一下指令内存中存放位置,让操作码放在一起,地址码放在一起: 这样存放的话如果程序没有特殊的要求,CPU只要自动地取下一条指令...
  • 程序在内存中的布局

    千次阅读 2017-08-06 14:00:57
    程序在运行时,由操作系统将可执行文件载入到计算机的内存中,成为一个...通常情况下,代码段是可共享的,使其可共享的目的是,对于频繁被执行的程序,需要在内存中有一份副本即可。代码段是只读的,使其只读的原因是
  • Windows进程的内存结构

    千次阅读 2013-03-05 09:33:47
    原文链接一直找不到,所以无法提供原文链  基础知识:堆栈是一种简单的数据结构,是一种允许在其一端进行插入或删除的线性表。...CPU的ESP寄存器存放当前线程的栈顶指针,EBP寄存器保存当
  • java中内存分配情况

    2018-05-17 11:54:00
    (class的目的是得到操作指令)2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身栈区:1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),...
  • java内存

    2017-07-04 21:23:57
    2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身  栈区:  1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中  ...
  • java的JVM的内存可分为3个区:堆(heap)、栈(stack)和方法区(method) 堆区: 1.存储的全部是对象,每个对象都包含一个与之对应的class的...1.每个线程包含一个栈区,栈中只保存原始类型数据和对象和对象引用(不是对象
  • C++内存分布详解

    2009-03-10 21:20:48
    堆栈是一种简单的数据结构,是一种允许在其一端进行插入或删除的线性表。...CPU的EIP寄存器存放下一个CPU指令存放内存地址,当CPU执行完当前的指令后,从EIP寄存器读取下一条指令内存地址,然后继续执行。
  • C语言函数调用时候内存中栈的动态变化详细分析

    千次阅读 多人点赞 2019-05-02 00:23:41
    先了解如下几点知识和过程: ...这些指令代码是存放内存中进程的代码段,同一个函数内的指令代码是按照地址顺序存储的(编译器决定的)(也就是说只要指令地址+1就可以自动得到下一条指令的地址...
  • windows进程内存结构 基础知识:堆栈是一种简单的数据结构,是一种允许在其一端进行插入或删除的线性表。...CPU的ESP寄存器存放当前线程的栈顶指针,EBP寄存器保存当前线程的栈底指针。CPU的...
  • java栈的区域很小,但是存取速度很快,所以在栈中存放的都是快速执行的任务,基本数据类型的数据和对象引用。 栈指针向下移动创建新的内存,向上移动释放内存 所以,JVM会对栈执行两种操作:1.以帧为单位的压栈...
  • 大部分机器指令集都支持一下5类计算: 汇编语言本来就是机器指令的助记符 EAX: EAX也是一种32位通用寄存器。 EAX寄存器称为累加器,AX寄存器是算术运算... EBX 是”基地址”(base)寄存器, 在内存寻址时存放...
  • java中内存主要包含4块,即heap(堆内存)、stack(栈内存)、data segment(静态变量或是常量存放区)、code...2.jvm只有一个堆区(heap)被所有线程共享,堆不存放基本类型和对象引用,只存放对象本身  栈区:  1.每个
  • 内存

    2016-05-23 10:19:55
    通常,代码区是可共享的(即另外的执行程序可以调用它),因为对于频繁被执行的程序,需要在内存中有一份代码即可。代码区通常是只读的,使其只读的原因是防止程序意外地修改了它的指令。另外,代码区还规划了局部...
  • C/C++内存四区!

    2021-03-31 14:07:54
    通常代码区是可共享的(即另外的执行程序可以调用它),使其可共享的目的是对于频繁被执行的程序,需要在内存中有一份代码即可。 代码区通常是只读的,使其只读的原因是防止程序意外地修改了它的指令。另外,代码...
  • 每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象) 每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问 栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 568
精华内容 227
关键字:

内存中只存放指令