分配内存块然后创建内存的逻辑子块并返回指向这些子块的指针

时间:2017-06-10 19:58:54

标签: c pointers memory memory-management

我在接受采访时被问到这个问题,在尝试谷歌/搜索SO后我感到非常困惑:

“编写一个分配4K内存块的C函数,然后创建10个逻辑子块并返回指向每个子块的指针”

我不完全确定“逻辑子块”在问题中意味着什么。什么是最好的方法来解决这个问题?

我可以简单地使用malloc分配一个4k块,然后创建额外的指针,增加1/10的大小(4k)?是否有一些聪明的位操作技巧使这很容易?

提前致谢!

1 个答案:

答案 0 :(得分:2)

"我可以简单地使用malloc分配一个4k块,然后创建额外增加1/10大小(4k)的指针吗?是否有一些聪明的位操作技巧使这很容易?"

我认为这不是关于比特操纵技巧,因为将4k除以10相当容易。

我更关心的是malloc将为您提供适合任何数据类型的指针(例如,参见此online C standard draft ):

  

7.22.3内存管理功能

     

(1)连续调用分配的存储的顺序和连续性   到aligned_alloc,calloc,malloc和realloc函数是   不确定的。 如果分配成功,则返回指针   适当地对齐,以便可以将其分配给指向任何类型的指针   具有基本对齐要求的对象然后习惯   在空间中访问这样的对象或这样的对象的数组   已分配(直到空间被明确解除分配)。

然而,将这样的内存块除以10并选择指向这些块的指针可能会给你指针,这些指针与你想要存储的数据类型没有正确对齐。