我到处搜寻,发现大多数人都提倡使用kmalloc
,因为可以确保您获得连续的物理内存块。但是,kmalloc
如果找不到所需的连续物理块,似乎也可能失败。
拥有连续的内存块有什么好处?具体来说,为什么我需要在系统调用中有一个连续的物理内存块?有什么原因我不能仅仅使用?
最后,如果要在处理系统调用期间分配内存,我应该指定吗?系统调用是否在原子上下文中执行?vmalloc
GFP_ATOMIC
GFP_ATOMIC
分配是高优先级,并且不休眠。这是在中断处理程序,下半部分和其他您无法入睡的情况下使用的标志。
GFP_KERNEL
这是正常分配,可能会阻塞。当可以安全睡眠时,这是在进程上下文代码中使用的标志。
vmalloc
使用Kernel 5.2(2019年第二季度)更快