我想测试创建NVMe I/O提交队列无效的队列地址偏移量
我使用C posix_memalign来分配内存范围
但是如何检查我得到的地址是否与QWord对齐?
我知道如果我想地址是单词对齐的,那么地址结束是00h
双字对齐的地址结尾是000h
那么qword对齐的地址结尾是0000h吗?
我可以在下面查一下吗?
if( address & 0xF != 0 )
printf("Not qword aligned");
谢谢
最佳答案
一个简单的方法是用逐位和来测试低位。在没有实现定义的行为的情况下,并没有一种完全可移植的方法来实现这一点,但这并不重要,因为您的目标是一个特定的体系结构。因此,您可以使用p
在x86的任何C编译器上测试(uintptr_t)(void*)p & 0x0f == 0
是否在16字节边界上对齐。
但是,这是一个XY问题:posix_memalign()
定义为执行您想要的操作。实际上,malloc()
保证返回满足任何类型的最严格对齐要求的内存,您可以选中alignof(max_align_t)
。
在这种情况下,您可能希望使用aligned_alloc()
,它存在于标准库中,以更严格的对齐要求分配内存,并且具有更简单的接口,或者calloc()
,它允许您指定元素大小,并且还可以从内存中减去零。
关于c - 如何检查malloc地址是否与QWord对齐?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51237698/