目录
程序中的数据和变量都会被分配到程序所在的虚拟内存中,内存空间包含两个重要区域:栈区(Stack)和堆区(Heap)。程序需要内存的时候,内存分配器会从堆中初始化内存然后返回给程序。
1,内存分配方式
1.1,线性分配器
维护一个指向已用内存位置的指针,随着内存的慢慢分配,指针也在缓慢的移动,即指针的一边是已经使用过的内存,另外一边是未使用内存。这种方式的确定是如果某些已经使用的内存得到释放,无法再次使用。
1.2,空闲链表分配器
内部会维护类似链表的数据结构,标记哪块内存被使用,哪块内存没有被使用,申请内存的时候,查看链表,寻找未使用的内存进行分配。由于是链表,分配的时候需要遍历链表,效率比较低。
1.3,线程缓存分配
使用多级缓存将对象根据大小分类,并按照类实施不同的分配策略。例如,内存分成两大块,第一大块使用空闲链表分配,第二大块使用线程缓存分配。