我想测试创建 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/