python原始碼剖析 整數物件 二

2022-09-15 09:45:11 字數 906 閱讀 6466

前面,我們說的是小整數物件池被啟用後,發生的一系列變化。下面來談談,當通用物件池被啟用,物件又是如何儲存的。

在pyint_fromlong中,在必要的空間被申請之後,python會從當前由free_list所維護的自由記憶體鍊錶中劃分一塊,並在這塊記憶體上建立所需的新的pyintobject物件,同時完成一些初始化工作。還要將free_list指標指向下乙個空閒的記憶體塊空間。

我們知道,兩個pyintblock處於同乙個鍊錶中,但是其中的object物件卻是分離儲存,在儲存過程中就可能出現這樣一種情況:

假設有兩個pyintblock物件,如上圖所示pyintblock1和pyintblock2,其中pyintblock1被object物件填滿,而pyintblock2中只填了少部分,現在的free_list指向pyintobject2的空閒塊。假設pyintblock1.object中的乙個pyintobject物件被刪除了。這就意味著pyintblock1出現了空閒塊,而pyintblock2能不能感知到pyintblock1存在空閒塊呢?我們知道,不同的pyintblock物件的object中的空閒塊是被鏈結在一起的,形成了單向鍊錶,表頭指標正是free_list.那麼,這個鏈結過程是發生在什麼時候?其實,這一切都發生在乙個pyintobject物件被銷毀的時候。至於是如何鏈結的,這裡就不再說明。

int _pyint_init(void

)#endif

return1;

}

從上述**,我們可以看出,這些小整數物件也是在block_list所維護的記憶體上。在python初始化的時候,_pyint_init被呼叫。記憶體被申請,小整數物件被建立。

至此,整數物件到這裡就結束了。

python原始碼剖析 Python原始碼剖析

第頁共 頁python 原始碼剖析 物件機制 1.物件 在python 的世界中,一切都是物件,乙個整數是乙個物件,乙個字串也是 乙個物件,更為奇妙的是,型別也是乙個物件,整數型別是乙個物件,字串類 型也是乙個物件。從 年guido 在那個聖誕節揭開 python 世界的大幕開始,一直到現在,pyt...

原始碼剖析 Hashtable 原始碼剖析

hashtable同樣是基於雜湊表實現的,同樣每個元素都是key value對,其內部也是通過單鏈表解決衝突問題,容量不足 超過了閾值 時,同樣會自動增長。hashtable也是jdk1.0引入的類,是執行緒安全的,能用於多執行緒環境中。hashtable同樣實現了serializable介面,它支...

Python原始碼剖析 Dict

為了刻畫某種關係,現代的程式語言都會提供關聯式的容器。關聯式容器中的元素分別是以 鍵 key 或值 value 這樣的形式存在。例如 3,5 3,6 就是一對對應的鍵與值。python中的關聯式容器是pydictobject。python通過pydictobject建立執行python位元組碼的執行...