作者LessonWang (橘白Cat)
看板Python
标题[问题] 整数sizeof问题
时间Fri Jun 30 12:31:54 2017
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官方文件也没提到
所以上来发问
感激不尽
-----
Sent from JPTT on my Asus ASUS_Z00UD.
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 110.28.72.40
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1498797116.A.3F8.html
1F:推 Yshuan: 我猜是python直译器 根据平台不同就会有不同的size实作 06/30 14:37
2F:→ mikapauli: python整数类似tuple,每多30位tuple长度多1 06/30 15:32
3F:→ mikapauli: 0类似空的tuple,正好空的tuple也是24bytes 06/30 15:33
4F:→ mikapauli: 只是tuple长度多1是多8bytes(因为64-bit?) 06/30 15:35
为何是30位长度多1 就是这个搞不清
5F:推 HenryLiKing: 感觉你问的问题都蛮深入的耶!!!! 06/30 16:35
※ 编辑: LessonWang (110.28.72.40), 06/30/2017 17:35:38
6F:→ freeunixer: 就只是因为不念书,伸手牌而已,跟深入有什麽关系? 06/30 18:39
7F:→ freeunixer: 去翻 spec 一定有讲.至少人家明明白白清清楚楚有交待, 06/30 18:40
8F:→ freeunixer: 24 bytes 是指那个 int var 是 0 .不是 0 就会往上加. 06/30 18:41
9F:→ freeunixer: 因为 3.x 会自动转型,所以数值超过原限制就会自动放大 06/30 18:44
10F:→ freeunixer: 3.x 版甚至也没有所谓明显的数型分别,依据实际值大小, 06/30 18:52
11F:→ freeunixer: 可以一直放大,放大到吃爆你记忆体为止. 06/30 18:53
12F:→ freeunixer: 每一件东西都只是看点皮毛,然後就开始瞎折腾,要答案, 06/30 18:55
13F:→ freeunixer: 这样是不行的. 06/30 18:55
14F:→ freeunixer: 如果是学来找问题,不是一般使用,直接 trace code 得了 06/30 19:01
实际应用的问题才是问题 这种刁钻难解而且有关语言本身底层运作的问题 真的毫无意义 只显得新手想一步登天而已 我会好好考虑之後问问题的模式 谢谢f大
16F:→ LessonWang: ude/longintrepr.h#L70 06/30 19:13
17F:→ mikapauli: 看了你给的连结,那就应该是因为要和2bytes的版本吻合 06/30 19:25
18F:→ mikapauli: 用我的理解帮你整理一下吧。为了方便转换到带号整数, 06/30 19:48
19F:→ mikapauli: 16-bit版的大数实作只用了15bits,以此写的pow_mod表有 06/30 19:51
20F:→ mikapauli: 32格(2**5)。以此沿用到32-bit版使其只用了30bits。 06/30 19:53
21F:→ mikapauli: 也不可能做长2**31的指数表,用30也合理。 06/30 19:54
原来如此 感谢m大!!
※ 编辑: LessonWang (110.28.72.40), 06/30/2017 19:57:17
※ 编辑: LessonWang (110.28.72.40), 06/30/2017 19:58:23
22F:推 darkgerm: 我觉得这个问题还不错,帮推一个 06/30 23:59
23F:推 HenryLiKing: 你是不是在做这方面的专题呀? 07/01 00:30
没有哦
24F:推 Sunal: 推trace code从头来 这麽关注底层乾脆学C++好了 07/01 00:45
有考虑过xd
※ 编辑: LessonWang (110.28.72.40), 07/01/2017 08:20:53
※ 编辑: LessonWang (110.28.72.40), 07/01/2017 09:14:14