但有时候内核需要分配一些物理内存地址也连续的内存页, 所以Linux使用了 伙伴系统分配算法 来管理系统中的物理内存页....那么给定一个 i 号内存页, 怎么找到他的伙伴内存页呢? 通过观察我们可以发现, 如果页面号是复数的, 那么他的伙伴内存页要加1, 如果页面号是单数的, 那么他的伙伴内存页要减1....答案是为了合并为更大的内存页, 例如把两个单位为1的伙伴内存页合并成为一个单位为2的内存页(这时应该称为内存块), 把两个单位为2的伙伴内存块合并为单位为4的内存块, 以此类推....那么order是不是无限大呢? 当然不是, 在Linux内核中, order的最大值是 10. 也就是说在内核中, 最大能够申请到一个 29 个页面的内存块....如果申请到的内存块比要申请的大小大, 那么需要调用 expand() 函数来把内存块分裂成指定大小的内存块.