gpt4 book ai didi

python - 在 python ctypes 中控制内存对齐

转载 作者:太空宇宙 更新时间:2023-11-03 11:09:39 24 4
gpt4 key购买 nike

我正在研究使用 ctypes 来使用 C 函数来处理必须在 16 字节边界上对齐的 SSE (__m128) 数据。

我找不到一种简单的方法来控制 ctypes 分配的内存的对齐方式,所以,现在,我让 ctypes 调用一个提供正确对齐的内存缓冲区的 C 函数。

我在使用这种方法时遇到的问题是我必须手动显式释放此内存以防止它被泄漏。

有没有办法控制 ctypes 分配的内存的对齐方式?或者有没有办法注册一个清理函数来释放由 ctypes 调用的 C 函数分配的内存(除了标准 python 运算符 __del__)?

最好的路径是什么?

最佳答案

我花了一些时间来研究,我想出了一个函数,它应该允许我使用 ctypes 分配任意对齐的内存,基本上依赖于 ctypes 应该保持对未对齐内存缓冲区的引用,同时具有从缓冲区中的对齐位置开始的实例。

仍然需要在生产中对此进行测试。

import ctypes

def ctypes_alloc_aligned(size, alignment):

bufSize = size+(alignment-1)
raw_memory = bytearray(bufSize)

ctypes_raw_type = (ctypes.c_char * bufSize)
ctypes_raw_memory = ctypes_raw_type.from_buffer(raw_memory)

raw_address = ctypes.addressof(ctypes_raw_memory)
offset = raw_address % alignment
offset_to_aligned = (alignment - offset) % alignment

ctypes_aligned_type = (ctypes.c_char * (bufSize-offset_to_aligned))
ctypes_aligned_memory = ctypes_aligned_type.from_buffer(raw_memory, offset_to_aligned)

return ctypes_aligned_memory

关于python - 在 python ctypes 中控制内存对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8658813/

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