我希望(在*nix中)分配一个大的、连续的地址空间,但是不立即消耗资源,也就是说,我想要预留一段地址范围,稍后再从中分配。
假设我执行foo=malloc(3*1024*1024*1024)来分配3G,但在1G计算机上,只有1G的交换文件。这会失败,对吧?
我想做的是说“给我一个内存地址范围foo...foo+3G,我将在其中进行分配”,以便我可以保证该区域内的所有分配都是连续的,但实际上并没有直接分配。
在上面的例子中,我想用foo=reserve_memory(3G)调用后跟随bar=malloc(123)调用,因为reserve_memory尚未消耗任何资源,所以应该成功,它仅仅是保证bar不会在范围foo...foo+3G内。
稍后我会执行allocate_for_real(foo,0,234),以消耗foo范围内的0到234字节。此时,内核将分配一些虚拟页面,并将它们映射到foo...foo+123+N。
这在用户空间中是否可行?
(这样做的目的是需要foo...中的对象是连续的,创建后不能合理地移动。)
谢谢。