如何仅使用标准库分配对齐内存?

如何仅使用标准库分配对齐内存?

作为求职面试的一部分,我刚刚完成了一个测试,有一个问题让我困惑不已,甚至用谷歌做参考。我想看看StackOverflow团队能做些什么:

这个memset_16aligned函数需要一个传递给它的16字节对齐指针,否则它会崩溃.

如何分配1024字节的内存,并将其与16字节的边界对齐?
(B)在memset_16aligned已经被处决了。

{    
   void *mem;
   void *ptr;

   // answer a) here

   memset_16aligned(ptr, 0, 1024);

   // answer b) here    }


GCT1015
浏览 516回答 3
3回答

慕勒3428872

这是“集合”部分的另一种方法。不是最出色的编码解决方案,但它完成了任务,而且这种语法更容易记住(加上对齐值,而不是2的幂)。这个uintptr_tCAST是安抚编译器所必需的;指针算术不太喜欢除法或乘法。void *mem = malloc(1024 + 15);void *ptr = (void*) ((uintptr_t) mem + 15) / 16 * 16;memset_16aligned(ptr, 0, 1024);free(mem);
打开App,查看更多内容
随时随地看视频慕课网APP