堆内存是计算机系统中,当多个程序同时运行时,为了这些进程能够共享数据、交换信息而把它们的数据存放在一个连续的区域。它是一个连续的内存区域,在物理上并不存在。

在操作系统中,"堆"(heap)被定义为"由一块连续的内存空间组成的存储区域"。它是虚拟内存的默认存放地址,因此所有常驻内存的程序都需要使用这个地址进行数据的暂时存放。

当应用程序需要从磁盘读取数据时(如:打开文件或向磁盘写数据),就会先到该区域中寻找合适的块来存放所读内容;如果找不到合适的内容块时,则将会在下一个可用的空闲块中去查找;如果还是没有找到合适的位置就继续向下查找直到遇到空闲的块为止。这样依次循环下去直至找到可以使用的空余内存为止。

"堆"中的每个快取单元都是的、彼此间没有关联关系的存储单元(称为页)。每个页都有一个与之对应的指针指向其自身的起始地址(称为偏移量)。当某个页面需要访问其它页面中的内容时,首先会通过指针指向的页面的起始地址来所需内容的第一个字节并把它存入自己的缓冲区中;然后再通过指针指向的页面去所需的第二个字节并把这两个字节相加得到完整的两个字节数后返回给它的指针所指的页面作为结束标志符;最后再把得到的两个字节相加得到完整的三个字节数并返回到它的指针所在位置即完成了对该页面的访问过程。

如果当前还没有任何用户正在使用这块连续的"可用空间",那么系统会自动为每一个快取单元分配一个大小为64mb的空间用于暂存用户临时调入的内容和已用掉的数据等.由于这种机制的存在使得整个系统不会因突然断电而导致硬盘上的数据丢失!

堆栈是由一组指令构成的顺序执行的一条条指令链的组合体.每条指令都有一条与之对应的操作码.每一条操作码都对应于一个特定的寄存器或控制逻辑电路.所以只要有一条操作码与某寄存器的状态发生改变相对应了这条操作就被执行了.也就是说我们可以通过修改寄存器的状态来达到对系统的控制目的!

堆内存和堆外内存的区别(什么是堆内存)(1)

,