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

标签 c nvme

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

相关文章:

x86 - PCI 和 PCIe 是否允许更改 BAR 值以将设备寄存器重新映射到新地址?

linux - linux 中的 ioctl() 是否有任何替代方法可以与 nvme 驱动器交互

virtualization - 如何使用 Samsung PM1733/1735 NVMe SSD 设置 SR-IOV

mysql - 在C中将MySQL连接保留在函数中的静态变量中(避免全局变量)

c - 用串口编程C读取多个传感器

c# - UnitTest 你如何组织你的测试文件?

c - 用于查找二进制可执行代码中内存泄漏的测试脚本或测试工具

c - 关于线程和变量复制的简单问题(无需同步)