如何在python中创建与posix\u memalign类似的内存对齐缓冲区

2024-03-28 12:47:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在Python中像C一样创建posix\u 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

Tags: 内存import机器datagetubuntumemposix
1条回答
网友
1楼 · 发布于 2024-03-28 12:47:39

我解决了这个问题。 根本原因是我在32位机器上运行,进程最多可以得到3GB的映射虚拟内存地址(mmap map data to virtual memory)。你知道吗

不在乎栈、syscall…等进程所用,进程几乎映射到虚拟内存2~2.5GB。你知道吗

另外,请致电mmap.关闭()将释放虚拟地址,然后我有足够的空间再次调用mmap。 原因如下:

  1. 32位计算机虚拟地址限制
  2. 忘了打电话mmap.关闭()使用mmap缓冲区后。

解决方案:

  1. 重用mmap缓冲区
  2. 找到一些方法来创建对齐的meomry缓冲区(我没有找到其他方法)

如果有人找到更好的方法,欢迎回答

相关问题 更多 >