每个进程堆大小,在32位window上, 进程高位2G留给内核,进程低位2G留给用户, 所以理论上堆大小不超过2G, LInux, 进程高位堆1G留给内核,3G留给内存, 理论上堆大小不超过3G
内存分配算法
1、First Fit (首次适应算法)
First Fit要求空闲分区链表以地址从小到大的顺序连接。分配内存时,从链表的第一个空闲分区开始查找,将最先能够满足要求的空闲分区分配给进程。
2、Next Fit (循环首次适应算法)
Next Fit由First Fit算法演变而来。分配内存时,从上一次刚分配过的空闲分区的下一个开始查找,直至找到能满足要求的空闲分区
3、Best Fit (最佳适应算法)
从所有空闲分区中找出能满足要求的、且大小最小的空闲分区。为了加快查找速度,Best Fit算法会把所有空闲分区按其容量从小到大的顺序链接起来,这样第一次找到的满足大小要求的内存必然是最小的空闲分区。
4、Worst Fit (最坏适应算法)
从所有空闲分区中找出能满足要求的、且大小最大的空闲分区。Worst Fit算法按其容量从大到小的顺序链接所有空闲分区。
5、Two LevelSegregated Fit (TLSF)
使用两层链表来管理空闲内存,将空闲分区大小进行分类,每一类用一个空闲链表表示,其中的空闲内存大小都在某个特定值或者某个范围内。这样存在多个空闲链表,所以又用一个索引链表来管理这些空闲链表,该表的每一项都对应一种空闲链表,并记录该类空闲链表的表头指针。
6、Buddysystems(伙伴算法)
Segregated Fit算法的变种,具有更好的内存拆分和回收合并效率。伙伴算法有很多种类,比如BinaryBuddies,Fibonacci Buddies等。Binary Buddies是最简单也是最流行的一种,将所有空闲分区根据分区的大小进行分类,每一类都是具有相同大小的空闲分区的集合,使用一个空闲双向链表表示。BinaryBuddies中所有的内存分区都是2的幂次方。
参考链接:https://mp.weixin.qq.com/s?src=11×tamp=1660004571&ver=3971&signature=1KlPnm4HejE3kYzgn*TSIXKy9se6qxCLf2Vlg74r16ejtfE15HRC581VVTv1CqBofMgiOIw8Kr3b86WPlt97EE80ioMeYQ4IC0z2JCB-FceNFnBOI1RqAwe5fJUK9CFv&new=1