yoa*_*str 9 unix linux linux-kernel
当我尝试malloc
在内核模块中使用时,我从编译器收到错误消息.我的代码:
res=(ListNode*)malloc(sizeof(ListNode));
Run Code Online (Sandbox Code Playgroud)
编译器错误消息是:
/root/ex3/ex3mod.c:491: error: implicit declaration of function ‘malloc’
Run Code Online (Sandbox Code Playgroud)
我该怎么办?
Dan*_*oni 16
注意两种分配方法之间的区别 - kmalloc
和kmem_cache
,或vmalloc
:
kmalloc
:最适用于小于页面的快速分配(大多数体系结构上的PAGE_SIZE,0x1000).它不涉及映射内存,因此您可以直接从内核的1:1物理内存映射中获取内存.你得到身体上的偶然记忆.请注意,如果您要分配多个页面(即订单> 0),则可能会遇到外部碎片问题 - 即即使有足够的空闲,呼叫也可能会失败.更高的顺序 - 更高的分配失败机会,以及正常运行时间也是一个因素.
如果你想实现最大的分配效率,那么就可以使用你自己kmem_cache
的每种类型的结构(这个策略的其他好处是能够/proc
更容易地监视你的分配状态并捕获内存泄漏).
vmalloc
:分配多个页面.你在内核空间得到映射内存.在幕后,它类似于用户空间 - 内核分配一堆页面并将它们映射到虚拟地址空间.这种分配比kmalloc
s 慢,内存访问可能会产生更多的开销.