当设置了size参数时,有没有一种方法可以使buffer()在不复制的情况下可写?

2024-10-04 05:21:01 发布

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

如果一个对象是可变的,那么可以通过不指定buffer()的第二个参数来获得可修改的缓冲区,如下所示:

>>> s = bytearray(1000000)   # a million zeroed bytes
>>> t = buffer(s, 1)         # slice cuts off the first byte
>>> s[1] = 5                 # set the second element in s
>>> t[0]                     # which is now also the first element in t!
'\x05'

但是,在我的例子中,我需要指定0x7fffffff作为size参数。在这种情况下:

^{pr2}$

how to make ^{} writeable without copying it’s data ?在我的例子中,_ctypes支持被禁用,并且程序不是以root用户身份启动的。
当然,像memoryview这样的东西是可用的,但是我失去了在每个虚拟地址读取内存的可能性。在


Tags: the对象in参数bytesbuffersliceelement
1条回答
网友
1楼 · 发布于 2024-10-04 05:21:01

复印件是必须的。bytearray的内部缓冲区并不长2 GiB;如果需要2 GiB的缓冲区,则需要将bytearray的数据复制到新的缓冲区中。在

如果您要以某种方式强制Python将缓冲区视为您希望的大小而不进行复制,那么写入它会损坏进程的内存和/或导致segfault。在

相关问题 更多 >