kmalloc(kmalloc和malloc区别)

频道:电子元器件 日期: 浏览:306

kmalloc

本文内容来自于互联网,分享kmalloc(kmalloc和malloc区别)

kmalloc目录[隐藏]

函数名

语法

参数

描述



[编辑本段]函数名

  kmalloc -- 分配内存

[编辑本段]语法

  void * kmalloc (size_t size, int flags);

[编辑本段]参数

  size 要分配内存的大小. 以字节为单位.

  flags 要分配内存的类型.

[编辑本段]描述

  在设备驱动程序或者内核模块中动态开辟内存,不是用malloc,而是kmalloc ,vmalloc,或者用get_free_pages直接申请页。释放内存用的是kfree,vfree,或free_pages. kmalloc函数返回的是虚拟地址(线性地址). kmalloc特殊之处在于它分配的内存是物理上连续的,这对于要进行DMA的设备十分重要. 而用vmalloc分配的内存只是线性地址连续,物理地址不一定连续,不能直接用于DMA.

  注意kmalloc最大只能开辟128k-16,16个字节是被页描述符结构占用了。kmalloc用法参见khg.

kmalloc(kmalloc和malloc区别)

  内存映射的I/O口,寄存器或者是硬件设备的RAM(如显存)一般占用F0000000以上的地址空间。在驱动程序中不能直接访问,要通过kernel函数vremap获得重新映射以后的地址。

  另外,很多硬件需要一块比较大的连续内存用作DMA传送。这块内存需要一直驻留在内存,不能被交换到文件中去。但是kmalloc最多只能开辟大小为32XPAGE_SIZE的内存,一般的PAGE_SIZE=4kB,也就是128kB的大小的内存。

kmalloc(kmalloc和malloc区别)


关键词:kmalloc区别malloc