如何在python中创建内存对齐缓冲区,如C中的posix_memalign

时间:2018-01-25 15:08:02

标签: python linux memory

我想在Python中创建像C一样的posix_memalign缓冲区

我曾经使用mmap在python中创建内存对齐的缓冲区

但是当我使用32位ubuntu时,我无法创建更多的mem对齐缓冲区。

因为我只能在 32位机器中完全 2G内存对齐缓冲区

无论如何用Python中的另一个库替换mmap?

这是我在32位机器上的测试代码

import mmap

blk = 50*512*1024
def get_buf():
        data = '\0'*blk
        buf=mmap.mmap(-1, blk, mmap.MAP_SHARED)
        buf.seek(0)
        buf.write(data)
        return buf

a=[]
for i in range(0, 4096):
        try:
                a.append(get_buf())
        except Exception as e:
                print i # will break when i = 77
                break

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。 根本原因是我在32位机器上运行,并且进程可以获得最多3GB的映射虚拟内存地址(mmap映射数据到虚拟内存)。

不关心进程使用的堆栈,系统调用等等,这个过程几乎映射虚拟内存2~2.5GB。

此外,调用mmap.close()将释放虚拟地址,然后我有可用空间再次调用mmap。 原因如下:

  1. 32位机器虚拟地址限制
  2. 忘记在使用mmap buffer后调用mmap.close()。
  3. 解决方案:

    1. 重复使用mmap缓冲区
    2. 找到一些方法来创建对齐的meomry缓冲区(我没有发现任何其他内容)
    3. 如果有人找到更好的方法,欢迎回答