我们可以分配动态内存吗?我知道malloc()
需要内存大小(以字节为单位)。我们可以编写一个以位为单位分配内存的内核模块吗?用户程序应该调用这个模块来分配内存。如果你们说是的话,我会开始研究它。
答案 0 :(得分:5)
如果您需要分配足够的内存来存储numBits
位,您可以将numBits
除以8,向上舍入,并使用该字节数调用malloc
。最后你可能会有一些额外的位,但这应该不是问题:
void *allocBits(size_t numBits) {
return malloc((numBits + 7) / 8);
}
答案 1 :(得分:5)
首先,你不能分配一点(在现代系统中甚至不是一个字节),因为你无法解决它。内存地址始终为数据提供数据总线的宽度(例如.64Bit)。
如果你想模仿按位分配@ godel9是对的。我更喜欢
ptr = malloc((numbits % 8) + 1).
答案 2 :(得分:0)
我认为没有理由编写这个模块,因为在大多数情况下,没有任何硬件方法可以在内存中分配单个位,该内存分为32位区域。即使在8位体系结构中,最小的内存量也只有一个字节,并且无法以硬件方式寻址单个位(除了特殊情况,如ARM的位带)。