我想知道一种确定指针是否属于mmaped内存页的方法。
StackOverflow上的Apost建议在指针上使用msync()来确定它是否通过但我发现只要指针是页面大小的倍数,msync()就会成功,不管页面是否被mmaped。
我通过宏计算页面的起始地址:
#define align_to_page(addr,pagesize) (addr & ~(pagesize - 1))
请帮帮我,我已经做了很长一段时间了,一直堵在这里提前谢谢:)
背景:
我正在开发Python和Numpy的扩展在某些函数中,它必须区分普通的numpy.ndarray和numpy.memmap,后者是numpy.ndaraay的一个子类,其数据缓冲区由磁盘上的文件支持的mmap()创建。
最佳答案
所有非空进程地址空间都是mmap
ed。可以使用mmap
syscall,也可以通过brk
/sbrk
syscalls间接。
您可能需要找到另一种方法来区分numpy
数组。numpy.memmap
文档说明,这些数组还有其他属性filename
、offset
和mode
,可能是您可以使用这些属性来检测数组是否有文件支持。
关于python - 如何确定是否在C中映射了内存页,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21829467/