gpt4 book ai didi

c - 在进程的内核空间中 kmalloc 优先于数组

转载 作者:太空宇宙 更新时间:2023-11-04 00:03:54 25 4
gpt4 key购买 nike

我正在阅读一些关于进程内核空间内存分配的资料。尽管我知道内核有一些少量/有限的内存(通常为 1GB),但为什么在定义大型数组时首选/推荐通过 kmalloc() 动态分配内存?换句话说,不建议在内核空间中分配大数组,而是建议使用动态分配的内存。

我的论点是,即使定义了一个非常大的数组,它也只会在需要时才获取实际内存,因此对内存的压力会更小。而 Kmalloc() 将分配所有需要的内存。第二个问题是,当 kmalloc 分配物理内存时,查找/准备所需的大小会给系统带来额外的压力。

但如果我在许多来源中读到这种偏好,那么就会有一些合理的理由与我的推理相去甚远。谁能阐明在内核空间中使用数组和 kmalloc() 的优点和缺点(如果有的话)

最佳答案

我看到这个链接 http://blog.csdn.net/macyang/article/details/5807008它用简单的例子清楚地解释了不在内核空间中使用数组的原因。主要原因是在内核空间中堆栈是固定大小的(通常是两页)而不是动态增长堆栈。数组存储在堆栈中,非常大的数组在堆栈上没有足够的空间。

但与此同时,这种解释也引发了诸多担忧。如果使用 kamlloc 与使用数组相比效率不高(我的争论被问到)但由于固定大小的堆栈我们仍然被迫使用它,这意味着固定大小的堆栈是必要的。小的固定大小堆栈的原因是可用内存有限,并且担心堆栈溢出在内核空间中可能是灾难性的。所以我们不能使用动态增长的堆栈,所以我们也不能使用大数组来保存在堆栈上。

关于c - 在进程的内核空间中 kmalloc 优先于数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31971573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com