程序在内存的存储

     今天忽然想到个问题,我们写的程序是怎么存储在内存里的?


计算机使用的是二进制,计算机为存储、组织这些二进制的数据定义了规则,也就是数据结构,常用的数据结构有数组、堆、栈、链表、散列表、队列等等。编程语言又把这些数据结构抽象成了自己的数据结构,数组、字典、哈希表、队列等等。代码使用的数据结构最后通过计算机的数据结构存储在内存中。


程序存储在虚拟机向操作系统要来的内存中,一般分为两个地方:程序存储区、数据存储区。我们写的代码会保存到程序存储区里面;而定义的一些全局变量,静态变量,局部变量之类的,就保存到数据存储区。程序员操作的主要是数据存储区。堆和栈都是属于这个区。


  •   栈,是系统自动分配和回收的,所以是有序、规范的。
  • 堆,是程序员分配的,一般由虚拟机回收,所以是自由、灵活的。
  •  栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放。
  • 堆则是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。
  • 栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。
  • 堆栈溢出指的是栈内存溢出,内存溢出指的是堆内存溢出。(一般来说)

你可能感兴趣的:(算法,内存,程序)