为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C
GCT1015 2019-07-17 19:02:37
如何仅使用标准库分配对齐内存?作为求职面试的一部分,我刚刚完成了一个测试,有一个问题让我困惑不已,甚至用谷歌做参考。我想看看StackOverflow团队能做些什么:这个memset_16aligned函数需要一个传递给它的16字节对齐指针,否则它会崩溃.如何分配1024字节的内存,并将其与16字节的边界对齐?(B)在memset_16aligned已经被处决了。{        void *mem;    void *ptr;    // answer a) here    memset_16aligned(ptr, 0, 1024);    // answer b) here    }
查看完整描述

3 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

这是“集合”部分的另一种方法。不是最出色的编码解决方案,但它完成了任务,而且这种语法更容易记住(加上对齐值,而不是2的幂)。这个uintptr_tCAST是安抚编译器所必需的;指针算术不太喜欢除法或乘法。

void *mem = malloc(1024 + 15);void *ptr = (void*) ((uintptr_t) mem + 15) / 16 * 16;memset_16aligned(ptr, 0, 1024);free(mem);


查看完整回答
反对 回复 2019-07-17
  • 3 回答
  • 0 关注
  • 515 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信