内存分配有静态分配和动态分配两种 静态分配在程序编译链接时分配的大小和使用寿命就已经确定,而应用上要求操作系统可以提供给进程运行时申请和释放任意大小内存的功能,这就是内存的动态分配。因此动态分配将不可避免会产生内存碎片的问题,那么什么是内存碎片?内存碎片即“碎片的内存”描述一个系统中所有不可用的空闲内存,这些碎片之所以不能被使用,是因为负责动态分配内存的分配算法使得这些空闲的内存无法使用,这一问题的发生,原因在于这些空闲内存以小且不连续方式出现在不同的位置。因此这个问题的或大或小取决于内存管理算法的实现上。为什么会产生这些小且不连续的空闲内存碎片呢?实际上这些空闲内存碎片存在的方式有两种:a.内部碎片 b.外部碎片 如何解决内存碎片参考:http://blog.csdn.net/pizi0475/article/details/17462399
程序浮动:除了一些特定的情况或者在早期的计算机中,程序在MEMORY中的位置是肯定的,比如会有BOOTLOADER把程序读到一个确定的位置,而现在的计算机基本上这种情况比较少见了,除了一些操作系统的引导过程,这就带来了一个问题,就是在程序(特别是用ASM写的程序)中制定的一些数据的位置是不确定的,比如你原来想读一个1500位置上的数据,但是实际上这个1500到底存了什么是不确定的,所以,采用了相对地址的策略,即所有的数据都是假设程序开始(ORG)位置为0的相对地址.... 所谓程序浮动,就是针对这样一种情况,在运行过程中采取相对地址的技术来实现的