我在接受采访时被问到这个问题,在尝试谷歌/搜索SO后我感到非常困惑:
“编写一个分配4K内存块的C函数,然后创建10个逻辑子块并返回指向每个子块的指针”
我不完全确定“逻辑子块”在问题中意味着什么。什么是最好的方法来解决这个问题?
我可以简单地使用malloc分配一个4k块,然后创建额外的指针,增加1/10的大小(4k)?是否有一些聪明的位操作技巧使这很容易?
提前致谢!
答案 0 :(得分:2)
"我可以简单地使用malloc分配一个4k块,然后创建额外增加1/10大小(4k)的指针吗?是否有一些聪明的位操作技巧使这很容易?"
我认为这不是关于比特操纵技巧,因为将4k除以10相当容易。
我更关心的是malloc
将为您提供适合任何数据类型的指针(例如,参见此online C standard draft ):
7.22.3内存管理功能
(1)连续调用分配的存储的顺序和连续性 到aligned_alloc,calloc,malloc和realloc函数是 不确定的。 如果分配成功,则返回指针 适当地对齐,以便可以将其分配给指向任何类型的指针 具有基本对齐要求的对象然后习惯 在空间中访问这样的对象或这样的对象的数组 已分配(直到空间被明确解除分配)。
然而,将这样的内存块除以10并选择指向这些块的指针可能会给你指针,这些指针与你想要存储的数据类型没有正确对齐。