1byte、1KB、4KB,1MB、1GB用16进制表示的范围。任意地址范围求字节数

请先打开一个在线的2进制转16进制的转换器,便于理解调试。

首先 1个字节=1byte=8Bit。

字节是计算机信息技术用于计量存储容量的一种计量单位,也表示一些计算机编程语言中的数据类型和语言字符。

1KB = 1024byte = 2的10次方 byte,转化为16进制为0x400。同时换一种说法,1KB可以表示1024个地址,0x400个地址,而且表示地址的范围是0x00~0x3FF。(记住)

2KB = 2的11次方byte, 转化为16进制为0x800,表示的地址范围为0x00~7FF。其中0x400~0x7FF表示的是第二KB的范围。

4KB = 2的12次方byte,0x1000,表示的地址范围0x000~0xFFF。(特殊要记住)

1MB = 1024KB = 2的20次方byte,0x100000。表示的地址范围为0x00000~0xFFFFF。(特殊要记住)

1GB=2的30次方byte,0x40000000。表示的地址范围为0x00000~0x3FFFFFFF

那么对于一个任意给定的地址范围(必然是1KB的整数倍)怎么反推字节数呢?

例如,0x000000~0x1FFFFF。

第一种解法,记住1M是5个F,多一位是2倍,所以是2M。

第二种解法,记住FFF是4KB,1FF是512, 512X4KB=2048KB也就是2M

20180621: 0x3000 表示地址0x0000-0x2FFF  12K

使用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、1mb1gb的内存分配,可以使用以下 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、1mb1gb大小的虚拟内存块,并打印了相应内存块的指针地址。与kmalloc不同,vmalloc函数返回的是虚拟地址,而不是物理地址。同样,打印的指针地址使用`%p`格式进行格式化输出。 以上两段代码可作为一个内核模块编译并加载运行。编译并加载模块后,可以在内核日志中查看相应的指针地址
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AlexFang0904

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值