请选择 进入手机版 | 继续访问电脑版

[LINUX] Linux内核环境下怎样 申请大块内存?

[复制链接]
查看90 | 回复7 | 2021-9-5 02:47:51 | 显示全部楼层 |阅读模式

在Linux内核环境下,申请大块内存的成功率随着体系 运行时间的增长 而减少,固然 可以通过vmalloc系列调用申请物理不连续 但假造 地址连续 的内存,但毕竟其利用 服从 不高且在32位体系 上vmalloc的内存地址空间有限。以是 ,一样平常 的建议是在体系 启动阶段申请大块内存,但是其成功的概率也只是比较高而已,而不是100%。假如 程序真的比较在意这个申请的成功与否,只能退用“启动内存”(Boot Memory)。下面就是申请并导出启动内存的一段示例代码:
 

  1. void* x_bootmem = NULL;
  2. EXPORT_SYMBOL(x_bootmem);
  3. unsigned long x_bootmem_size = 0;
  4. EXPORT_SYMBOL(x_bootmem_size);
  5. static int __init x_bootmem_setup(char *str)
  6. {
  7. x_bootmem_size = memparse(str, &str);
  8. x_bootmem = alloc_bootmem(x_bootmem_size);
  9. printk("Reserved %lu bytes from %p for x\n", x_bootmem_size, x_bootmem);
  10. return 1;
  11. }
  12. __setup("x-bootmem=", x_bootmem_setup);
复制代码

可见其应用还是比较简单的,不过利弊总是共生的,它不可避免也有其自身的限定 :

1.内存申请代码只能毗连 进内核,不能在模块中利用 。

2.被申请的内存不会被页分配器和slab分配器所利用 和统计,也就是说它处于体系 的可见内存之外,即使在将来的某个地方你开释 了它。

3.一样平常 用户只会申请一大块内存,假如 必要 在其上实现复杂的内存管理则必要 本身 实现。

在不答应 内存分配失败的场合,通过启动内存预留内存空间将是我们唯一的选择。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

avatar 苏警暗刚 | 2021-9-5 23:31:42 | 显示全部楼层
admin楼主是男的还是女的?
回复

使用道具 举报

avatar 真无牙泛 | 2021-9-12 23:21:34 | 显示全部楼层
admin楼主又闹绯闻了!
回复

使用道具 举报

avatar 孤客9116 | 2021-9-22 16:25:13 | 显示全部楼层
admin楼主该去看心理医生了!
回复

使用道具 举报

avatar 第一个甲马俳 | 2021-10-5 00:00:12 | 显示全部楼层
admin楼主主机很热情啊!
回复

使用道具 举报

avatar 123457748 | 2021-10-14 13:02:02 | 显示全部楼层
我和我的小伙伴都惊呆了!
回复

使用道具 举报

avatar 大嘴997 | 2021-10-19 22:42:00 | 显示全部楼层
admin楼主,我告诉你一个你不知道的的秘密,有一个牛逼的网站,他卖的服务器是永久的,我们的网站用 服务器都是在这家买的,你可以去试试。访问地址:http://fwq.mxswl.com
回复

使用道具 举报

信admin楼主,得永生!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则