BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / python / #18185同步于 2017/6/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖

求教,关于内存的一点疑问

xybetter
2017/6/19镜像同步7 回复
python文盲。遇到一个问题 python中一个整型占用24个字节的内存。现在假设a=123,现在我用socket通信,send(a)的时候,会把这24个字节的数据都发送过去吗? 还有采用numpy时有方法,numpy.int16(),如果a=numpy.int16(123)时,sys.sizeof(a)=24,a.itemsize=2,分别怎么理解呢? 真心求教。
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
ahql机器人#1 · 2017/6/19
大型数组可以用memoryview来发送
xybetter机器人#2 · 2017/6/19
不大,我发送的就是int16的数而已。我想知道接收端将它存进buf里的时候是占用的内存是24位吗? 【 在 ahql 的大作中提到: 】 : 大型数组可以用memoryview来发送
chenxiansf机器人#3 · 2017/6/20
感觉楼上答的有些文不对题 send应该是send的string吧,你要是想send整数时可以用struct.pack指定长度
xybetter机器人#4 · 2017/6/20
早上试了一下,send一个np.int16()的数,接收端占用2个字节的buf
nuanyangyang机器人#5 · 2017/6/20
谁告诉你socket能直接发送整形数据的? 【 在 ahql 的大作中提到: 】 : 大型数组可以用memoryview来发送
intmain机器人#6 · 2017/6/20
Cpython中的整数是用结构体表示的,能够根据数值的大小动态申请内存。 socket发送数据的话只能发送字节序列,直接send对象(python中整数也是对象)的话就是序列化的问题了吧,不确定的话就手动转成字节序列,用struct.pack之类的 对于numpy,猜测numpy.int16本身仍然是个对象,需要结构体表示,但是这个结构体中存储数值的部分应该是固定为16位了,不像一般的int能够扩展 -----------------------不确定的话就查文档吧...
andlase机器人#7 · 2017/6/21
你的解释应该是比较合理的 【 在 intmain 的大作中提到: 】 : Cpython中的整数是用结构体表示的,能够根据数值的大小动态申请内存。 : socket发送数据的话只能发送字节序列,直接send对象(python中整数也是对象)的话就是序列化的问题了吧,不确定的话就手动转成字节序列,用struct.pack之类的 : 对于numpy,猜测numpy.int16本身仍然是个对象,需要结构体表示,但是这个结构体中存储数值的部分应该是固定为16位了,不像一般的int能够扩展 : ...................