如果一个对象是可变的,那么通过不指定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参数。在那种情况下:
>>> b = buffer(bytearray('a'), 1,0x7fffffff)
how to make b
writeable without copying it’s data?在我的情况下,_ctypes
支持被禁用,程序不会以root身份启动
当然,像memoryview这样的东西是可用的,但我放弃了在每个虚拟地址读取内存的可能性。
答案 0 :(得分:0)
副本是必要的。 bytearray的内部缓冲区根本不是2 GiB长;如果你想要一个2 GiB缓冲区,你需要将bytearray的数据复制到一个新的缓冲区。
如果你以某种方式迫使Python将缓冲区视为你想要它的大小而不复制,那么写入它会破坏你的进程的内存和/或导致段错误。