使用kmalloc分配1kb,8kb的内存,打印指针地址; 使用vmalloc分配8kb、1mb、
时间: 2023-10-23 10:03:34 浏览: 197
使用kmalloc函数可以在内核中分配指定大小的内存块,以字节为单位。对于1kb的内存分配,可以使用以下 C 代码:
```c
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/slab.h>
void allocate_memory()
{
void *mem_1kb = kmalloc(1024, GFP_KERNEL);
void *mem_8kb = kmalloc(8192, GFP_KERNEL);
if (!mem_1kb || !mem_8kb) {
printk(KERN_INFO "Failed to allocate memory\n");
return;
}
printk(KERN_INFO "Pointer address of 1kb memory: %p\n", mem_1kb);
printk(KERN_INFO "Pointer address of 8kb memory: %p\n", mem_8kb);
kfree(mem_1kb);
kfree(mem_8kb);
}
MODULE_LICENSE("GPL");
module_init(allocate_memory);
```
上述代码使用kmalloc分配了1kb和8kb大小的内存块,并打印了相应内存块的指针地址。打印的指针地址使用`%p`格式进行格式化输出。
使用vmalloc函数可以在内核中分配连续的虚拟内存块,以页为单位。对于8kb、1mb和1gb的内存分配,可以使用以下 C 代码:
```c
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/vmalloc.h>
void allocate_memory()
{
void *mem_8kb = vmalloc(8192);
void *mem_1mb = vmalloc(1048576);
void *mem_1gb = vmalloc(1073741824);
if (!mem_8kb || !mem_1mb || !mem_1gb) {
printk(KERN_INFO "Failed to allocate memory\n");
return;
}
printk(KERN_INFO "Pointer address of 8kb memory: %p\n", mem_8kb);
printk(KERN_INFO "Pointer address of 1mb memory: %p\n", mem_1mb);
printk(KERN_INFO "Pointer address of 1gb memory: %p\n", mem_1gb);
vfree(mem_8kb);
vfree(mem_1mb);
vfree(mem_1gb);
}
MODULE_LICENSE("GPL");
module_init(allocate_memory);
```
上述代码使用vmalloc分配了8kb、1mb和1gb大小的虚拟内存块,并打印了相应内存块的指针地址。与kmalloc不同,vmalloc函数返回的是虚拟地址,而不是物理地址。同样,打印的指针地址使用`%p`格式进行格式化输出。
以上两段代码可作为一个内核模块编译并加载运行。编译并加载模块后,可以在内核日志中查看相应的指针地址。
阅读全文