自定義python自建型別(一)剖析

2021-08-09 15:28:41 字數 620 閱讀 5258

由於python的dict在儲存時,為了降低衝突增大命中率,採用了比較寬鬆的空間分配方案

typedef

struct _dictobject pydictobject;

struct _dictobject ;

其中ma_table的每次擴容都是變為原來的2倍長度

if (!(mp->ma_used > n_used && mp->ma_fill*3 >= (mp->ma_mask+1)*2))

return

0; return dictresize(mp, (mp->ma_used > 50000 ? 2 : 4) * mp->ma_used);

而ma_smalltable也要固定占用8個長度

typedef

struct pydictentry;

更不用說pydictentry內部既存了key也存了hash。

這樣的存放策略是為了降低衝突,從而保證查詢/增加資料的時候的時間消耗,對於一般的dict,是適用的。

然而對於遊戲中,存在大量的一經生成就不會再進行修改的data,這裡,python內建dict就不再適用了。

自定義python自建型別(五)進一步優化的YY

其實還有更有效的優化方式 我們發現其實很多時候我們的查詢時間消耗都在計算hash跟hash比對上 空間效率比較高的map們可能還有各種發生衝突時的解決方法 如果我們製作一種dict,它的key全是int,且長度很短 不高於16 那麼可想而知,這種dict的查詢效率也是很高的,哪怕它的查詢是遍歷對比。...

自定義型別

typedef型別 typedef 已有型別 新建型別 示例 typedef double area,volume typedef int number number i1 area a enum enum 列舉型別名 enum week 預設sun 0,可以比較 如果修改必須形如enum week...

自定義型別

下面列舉幾種c語言中常用的自定義資料型別 1.結構體型別 當描述乙個整型變數時,可以用int,描述字元型變數時,可以用char,但要描述乙個學生時,因為這個學生包含的資訊很多,比如姓名,性別,年齡等,不能通過單一的型別來描述,所以,這裡引入結構體型別,將某個事物的共有屬性集合在一起,宣告乙個結構體型...