如何在不分配内存的情况下保留内存地址

我希望(in * nix)分配一个庞大的,连续的地址空间,但是不会立即消耗资源,即我想要稍后保留一个地址范围.

假设我做foo = malloc(3 * 1024 * 1024 * 1024)来分配3G,但是在1G的交换文件的1G计算机上.它会失败,对吧?

我想做的是说“给我一个内存地址范围foo … foo 3G我将分配给我”,所以我可以保证在这个区域内的所有分配是连续的,但没有实际分配.

在上面的例子中,我想使用一个bar = malloc(123)调用来执行foo = reserve_memory(3G)调用,因为reserve_memory还没有消耗任何资源,所以它应该是成功的,它只是保证这个bar不在范围内foo … foo 3G.

后来我会做一些像alloc_for_real(foo,234)这样的东西来消耗foo范围的0..234的字节.在这一点上,内核将分配一些虚拟页面并将其映射到foo … foo 123 N

这是否可能在用户空间?

(这里的意思是,foo中的对象需要是连续的,创建后不能被合理地移动.)

谢谢.

解决方法

简短的答案:它已经这样工作了.

稍长的答案:坏消息是,没有特殊的方式来保留一个范围,而不是分配.然而,好消息是,当您分配一个范围时,Linux实际上并不会分配这个范围,而是稍后保留供您使用.

只要存在地址范围,Linux的认行为就是始终接受新的分配.当您实际开始使用内存时,最好有一些内存或至少交换备份.如果没有,内核会杀死一个进程来释放内存,通常是分配最多内存的进程.

因此,使用认设置的Linux中的问题会从“我可以分配多少”转移到“我可以分配多少,然后在开始使用内存时仍然存活”.

Here is some info关于这个问题.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...