微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我希望(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关于这个问题.

原文地址:https://www.jb51.cc/c/111324.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐