我正在研究使用 ctypes 来使用 C 函数来操作必须在 16 字节边界上对齐的 SSE (__m128) 数据。
我找不到一种简单的方法来控制由 ctypes 分配的内存对齐,因此,现在,我让 ctypes 调用提供正确对齐内存缓冲区的 C 函数。
我使用这种方法的问题是我必须手动显式释放此内存以防止它被泄漏。
有没有办法控制 ctypes 分配的内存对齐?或者有没有办法注册一个清理函数来释放由 ctypes 调用的 C 函数分配的内存(除了标准的 python 运算符__ del __)?
最好的方法是什么?
我认为c_ulonglong(64位)必须是64位对齐的;这是一个开始。然后文档建议您可以使用_pack_来控制结构的对齐。这两个并不完全是您想要的,但是通过将它们组合起来,您可以分配没有漏洞的 8 字节对齐结构。
我们假设一个结构体有 3 个 8 字节对齐的元素.v0, .v1, .v2。用于addressof()查看结构是否是 16 字节对齐的。如果是,请使用.v0and.v1作为您的 128 位值;如果不是,请使用.v1和.v2。