gpt4 book ai didi

c - 如何检查 malloc 地址是 QWord 对齐的?

转载 作者:太空宇宙 更新时间:2023-11-04 06:51:05 25 4
gpt4 key购买 nike

我想测试创建 NVMe I/O 提交队列无效队列地址偏移量

我使用 C posix_memalign 来分配内存范围

但是如何检查我得到的地址是否是 QWord 对齐的?

我知道如果我希望地址是字对齐的,那么地址结尾是 00h双字对齐的地址结尾为000h

那么qword对齐的地址结尾是0000h吗?

我可以通过下面检查吗?

if( address & 0xF != 0 )
printf("Not qword aligned");

谢谢

最佳答案

一个简单的方法是用按位与测试低位。在没有实现定义的行为的情况下,没有一种完美可移植的方式来做到这一点,但这并不重要,因为您的目标是一种特定的体系结构。所以,你可以测试 p在 x86 的任何 C 编译器上以 16 字节边界对齐,使用 (uintptr_t)(void*)p & 0x0f == 0 .

但是,这是一个 XY 问题:posix_memalign()被定义为做你想做的事。事实上,malloc()保证返回满足任何类型的最严格对齐要求的内存,您可以查看 alignof(max_align_t) .

在这种情况下,您可能想使用 aligned_alloc() , 它存在于标准库中,用于分配具有更严格对齐要求的内存,并且具有更简单的接口(interface),或 calloc() ,它允许您指定元素大小并将内存清零。

关于c - 如何检查 malloc 地址是 QWord 对齐的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51237698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com