`
xuhuankeven
  • 浏览: 35676 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

程序在内存中开辟空间的过程

阅读更多
首先声明两条,这两条很重要,下面的所有过程都将以这两条为基础:
1、程序中每运行一个方法都将在内存中建立一个栈,执行完栈消失;
2、程序中每运行一个new都将在堆中建立一个对象。

运行main生成一个栈,为叙述方便记为栈1(下同),
Test test = new Test();    //在堆中生成test对象,
int date = 9;              //栈1中开辟4 个字节空间date存入9,
BirthDate d1 = new BirthDate(7,7,1970);  //在堆中生成对象d1存入(7,7,1970),
BirthDate d2 = new BirthDate(1,1,2000); //在堆中生成对象d2存入(1,1,2000),
test.change1(date);       //生成栈2存入date并赋值1234,执行完这条后该
                             栈消失,因此没改变栈1中的date,
test.change2(d1);         //该方法(有一个new生成一个新对象b)生成栈3
                            存入b的地址,执行完这条后该栈消失,因此没改变堆中的d1,
test.change3(d2);         //该方法(内有一个类方法生成栈5存入22并赋给
                            d2中的day,即d2已更新为(22,1,2000))执行
                            产生栈4执行完栈4消失(栈5也同时消失),
......

public void change1(int i)
{
    i = 1234;
}
public void change2(BirthDate b)
{
  b = new BirthDate(22,2,2004);
}
public void change3(BirthDate b)
{
   b.setDay(22);
}

Point p1 = new Point(double x,double y){    //在堆中new一个p1对象,由于构造器本身是一个
                                              方法,因此建一个栈6开辟两个double空间
this.x = x;                                //this表示当前对象,将栈6中的两个double空间
                                              的内容赋给堆中p1的x、y
this.y = y;

}                                           //方法结束栈6消失
分享到:
评论

相关推荐

    在实例化对象的过程中需要在内存中开辟空间,这其中就包括栈内存和对内存。

    Java程序在运行过程中涉及多种不同的内存区域,其中最重要的是栈内存和堆内存。这两种内存分别用于存储不同类型的数据,并且具有不同的生命周期。 #### 二、栈内存与堆内存 1. **栈内存(Stack Memory)** - **特点...

    c# 在内存中装载并运行程序或程序集

    这个特性主要通过System.Reflection命名空间中的类来实现。下面将详细阐述如何在C#中进行内存加载和运行程序或程序集。 首先,我们需要理解程序集(Assembly)的概念。在.NET中,程序集是代码的物理组织单元,包含...

    在内存中实现一个虚拟磁盘

    使用这样的工具或者命令,我们可以在内存中快速创建一个临时工作空间,进行软件安装、数据处理等操作,而不会影响到物理磁盘上的数据。此外,这种方式还可以提高系统的响应速度,因为内存的读写速度远高于硬盘。然而...

    C语言模拟实现Linux文件系统

    1、在内存中开辟一块空间来模拟文件系统的运行,不读写硬盘。 2、面向单用户、单任务,不考虑并发,不考虑文件属主、组等概念。 3、程序开始后,初始化并接收用户输入。若输入”enter”,则重新建立文件系统, 读取...

    易语言内存释放演示

    1. **内存分配**:易语言中的内存分配可能使用了类似“内存开辟”或“内存申请”的命令,分配指定大小的内存块。 2. **内存使用**:分配后的内存会被用来存储数据,如变量、数组、对象等。理解数据在内存中的布局有...

    开辟空间存放结构体变量.zip_开辟空间存放结构体变量

    在提供的文件"开辟空间存放结构体变量"中,可能包含了一个简单的C++程序,演示了如何定义结构体、在内存中创建结构体实例以及如何访问和修改结构体成员。初学者可以通过分析这个程序来深入理解上述概念。 此外,...

    操作系统中的文件管理程序模拟文件管理

    次操作系统程序为文件管理 也就是模拟文件管理来达到深入理解

    易语言写程序的内存数据源码

    4. 内存搜索:在易语言中,可以编写程序实现内存搜索功能,用于查找内存中的特定值或模式。这在游戏修改或自动化脚本中很常见。 5. 内存结构分析:对于复杂的数据结构,如数组、链表、对象等,需要理解它们在内存中...

    arm lpc2103在内存中开辟数据队列。使用keil开发

    在这个项目中,我们将探讨如何在LPC2103的内存中开辟数据队列,并使用Keil开发环境进行程序编写。 数据队列是一种常见的数据结构,它允许元素按照先进先出(FIFO,First In First Out)的原则进行存储和访问。在...

    操作系统课程设计:用C++实现虚拟内存技术

    在操作系统中,虚拟内存技术是一项至关重要的功能,它使得有限的物理内存能够被更有效地利用,支持更大的应用程序和多任务环境。本课程设计旨在通过C++语言实现虚拟内存的模拟,帮助学生深入理解虚拟内存的工作原理...

    操作系统资源

    在这个课程设计中,学生们将深入理解并模拟实际操作系统如何管理和调度有限的硬件资源,特别是内存。以下是根据提供的信息详细阐述的知识点: 1. **进程内存管理**: - 操作系统为每个进程在内存中分配了固定的4个...

    磁盘存储空间管理(含代码)

    本文档通过提供具体的代码实现,展示了如何在 UNIX 文件系统中实现磁盘空间的分配与管理。这种基于索引分配的方法不仅能够有效地管理磁盘空间,还能够支持大文件的创建和存储。通过对这些代码的学习,读者可以更好地...

    C/C 程序的内存分配

    例如,函数内的局部变量 `int b`,系统会在栈中自动为其开辟空间。 - **堆**:需要程序员手动申请并指定大小。例如,使用 `malloc` 或 `new` 进行内存分配。 - **申请后系统的响应** - **栈**:如果栈剩余空间...

    操作系统的信息

    - 在这个实验中,内存和外存的模拟是通过开辟两块存储空间来实现的,其大小分别为8MB(内存)和25MB(外存)。内存模拟的是处理器可以直接访问的RAM,而外存模拟的是磁盘等大容量存储设备。通过这种方式,可以模拟...

    堆内存和栈内存详解,我感觉挺好的

    堆内存和栈内存是程序运行时的两个主要内存区域,它们在程序的执行过程中扮演着非常重要的角色。栈内存是由编译器自动分配释放的,存放函数的参数值、局部变量的值等,而堆内存则是由程序员分配释放的,用于存储程序...

    host端FFT的IPC通信,开辟CMEM192M空间的2M空间为共享内存,2M空间分成四个512K分区

    在本文中,我们将深入探讨如何在嵌入式系统中实现基于IPC(Inter-Process Communication,进程间通信)的FFT(快速傅里叶变换)通信,特别是在Host端利用CMEM(Contiguous Memory,连续内存)开辟2MB空间作为共享...

    预备知识―程序的内存分配

    - 另外,在Windows环境下,推荐使用`VirtualAlloc`来分配内存,因为它既不在堆也不在栈,而是在进程的地址空间中直接预留一块内存。这种方法虽然使用起来最不方便,但速度最快、最灵活。 5. **堆和栈中的存储内容*...

    指针的指针,引用,指针的引用,以及动态内存分配malloc讲解

    静态声明定义变量都是在栈内存中分配空间,在栈空间中会自动释放,而动态分配内存空间是在动态内存空间中开辟的,其中开辟的空间不会自动释放。 这里我还想重申一下数组。 例如在主函数中写到int a[10]; 这里的a...

    内存中的堆与栈区别 内存中的堆与栈区别

    当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程序,另外,对于大多数系统,会在这块内存空间中的首地址处记录本次分配...

    内存中堆和栈的区别

    系统自动在栈中为 b 开辟空间。 系统响应方面 堆:操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并...

Global site tag (gtag.js) - Google Analytics