如何写个吃内存的demo,让内核直接分配大块物理页面?
我试了下,不论是用for循环一个个字节的写入malloc所申请的线性地址还是用memset,内核里都是单次最多给order为零的4KB的页面,即使我写入总共为512MB的数据也是如此,每次都是从大空闲页块中分裂出4KB的最小页面,而不是直接分配大页面写入。
------解决方案--------------------因为内核在工作的时候也会有大量的小对象分配和使用,buddy算法正是适合它的。至于用户空间的,内核只管分配4KB的虚拟内存页,至于怎么管理,用什么堆都是应用程序和库文件的工作。
2楼说的很对,如果你需要大块连续物理内存,必然就会和分页内存冲突,这部分内存不能进入虚拟内存,不能分页,也不能交换到硬盘,类似Windows里的AWE
再说虚拟内存已经很好的掩盖了物理内存地址,再说不同内存地址的访问速度通常也不会有差异。对于应用程序来说虚拟内存地址连续就已经可以了,没有必要再要求物理连续。
------解决方案--------------------