PTT
Submit
Submit
选择语言
正體中文
简体中文
PTT
Python
[问题] 整数sizeof问题
楼主:
LessonWang
(橘白Cat)
2017-06-30 12:31:54
python新手发问
在实作时遇到一个问题
(0).__sizeof__()
回传24bytes的大小
(1).__sizeof__()
为28bytes的大小
(1073741823).__sizeof__()
为28bytes的大小
(1073741824).__sizeof__()
为32bytes的大小
总结以上和实作
整数0 大小为24bytes
整数1~1073741823及-1~-1073741823为28bytes
整数1073741824~? 为32bytes
....以此类推
我想要问的是
1073741824大小为什么是32bytes
而1073741823大小为什么是28bytes
这个数字是如何推导出来的?
或者说背后的储存原理是什么?
(这个数字我是用for+if去抓出来的)
还有 为什么整数0大小却是24bytes
而1之后却是28bytes了
爬stackoverflow没有相关的问题
google也没有讲解
甚至连python官方文件也没提到
所以上来发问
感激不尽
作者:
Yshuan
(倚絃)
2017-06-30 14:37:00
我猜是python直译器 根据平台不同就会有不同的size实作
作者:
mikapauli
(桜花)
2017-06-30 15:32:00
python整数类似tuple,每多30位tuple长度多10类似空的tuple,正好空的tuple也是24bytes只是tuple长度多1是多8bytes(因为64-bit?)
作者:
HenryLiKing
(HenryLiKing)
2017-06-30 16:35:00
感觉你问的问题都蛮深入的耶!!!!
作者:
freeunixer
(御剑客)
2017-06-30 18:39:00
就只是因为不唸书,伸手牌而已,跟深入有什么关系?去翻 spec 一定有讲.至少人家明明白白清清楚楚有交待,24 bytes 是指那个 int var 是 0 .不是 0 就会往上加.因为 3.x 会自动转型,所以数值超过原限制就会自动放大3.x 版甚至也没有所谓明显的数型分别,依据实际值大小,可以一直放大,放大到吃爆你内存为止.每一件东西都只是看点皮毛,然后就开始瞎折腾,要答案,这样是不行的.如果是学来找问题,不是一般使用,直接 trace code 得了
楼主:
LessonWang
(橘白Cat)
2017-06-30 19:13:00
https://github.com/python/cpython/blob/master/Incl
ude/longintrepr.h#L70
作者:
mikapauli
(桜花)
2017-06-30 19:25:00
看了你给的连结,那就应该是因为要和2bytes的版本吻合用我的理解帮你整理一下吧。为了方便转换到带号整数,16-bit版的大数实作只用了15bits,以此写的pow_mod表有32格(2**5)。以此沿用到32-bit版使其只用了30bits。也不可能做长2**31的指数表,用30也合理。
作者:
darkgerm
(黑骏)
2017-06-30 23:59:00
我觉得这个问题还不错,帮推一个
作者:
HenryLiKing
(HenryLiKing)
2017-07-01 00:30:00
你是不是在做这方面的专题呀?
作者:
Sunal
(SSSSSSSSSSSSSSSSSSSSSSS)
2017-07-01 00:45:00
推trace code从头来 这么关注底层干脆学C++好了
继续阅读
[问题] 吃药随机分配
jackflu
[问题]自动登入email问题
yimean
[问题] 要怎么读取环境变量?
shiyeh
[问题] Mac pygame 安装
ptt0720
[讨论] 想把自己写的游戏推广变大要怎么走第一步
HenryLiKing
[问题] openni问题
remnantplume
Re: [问题] 字串的比较与invalid syntax 求助
crazycy
[问题] 字串的比较与invalid syntax 求助
nanokevin
Re: [问题] 如何有系统的用MOOC学python
pachinko
[问题] 关于Pool的终止时间
phoenixcx
Links
booklink
Contact Us: admin [ a t ] ucptt.com