是否可以按位分配动态内存?

Chi*_*nna 0 c linux memory-management dynamic linux-kernel

我们可以分配动态内存吗?我知道malloc()需要以字节为单位的内存大小.我们可以编写一个以位为单位分配内存的内核模块吗?用户程序应该调用这个模块来分配内存.如果你们说是的话,我会开始研究它.

god*_*el9 5

如果需要分配足够的内存来存储numBits位,则可以除以numBits8,向上舍入,并malloc使用该字节数进行调用.最后你可能会有一些额外的位,但这应该不是问题:

void *allocBits(size_t numBits) {
    return malloc((numBits + 7) / 8);
}
Run Code Online (Sandbox Code Playgroud)


Joa*_*eiß 5

首先,你不能分配一点(在现代系统中甚至不是一个字节),因为你无法解决它.内存地址始终为数据提供数据总线的宽度(例如.64Bit).

如果你想模仿按位分配@ godel9是对的.我更喜欢

ptr = malloc((numbits % 8) + 1).
Run Code Online (Sandbox Code Playgroud)