《Python源碼剖析》閱讀筆記:第二章-整數對象

來源:互聯網
上載者:User
第二章-整數對象

 整數對象定義:
typedef struct {
        PyObject_HEAD
        long ob_ival;
} PyIntObject;
可以看到僅多了一個long域ob_ival來儲存整數。之所以用long,是因為這裡用long最高的符號位作為溢出標記位。

整數對象記憶體管理機制:
1. 小整數:在[ -NSMALLNEGINTS, NSMALLPOSINTS )範圍內的整數定義為小整數,緩衝在對象池中,在Python運行過程中不會被銷毀,用於快速引用(比如用於迴圈變數時)。其值範圍可以手工指定,但是得重新編譯代碼
2. 普通整數:除了小整數範圍內的整數都為普通整數,儲存在通過由block_list鏈錶鏈接起來的對象池中。
struct _intblock {

struct _intblock *next;
PyIntObject objects[N_INTOBJECTS];

};
typedef struct _intblock PyIntBlock;

static PyIntObject *free_list = NULL;
由free_list空閑鏈表將未使用的objects記憶體連結起來。注意,在free_list中,由ob_type域充當指向下一節點的指標,顯然這裡放棄了型別安全。並且鏈表表頭在數組尾部。
每次需要申請一個整數對象,從free_list表頭摘取一個對象,再將free_list指向下一個元素。
當一個對象的記憶體被回收時,重新將該對象鏈入free_list。

小整數由於首先被初始化,所以位於block_list鏈表尾端

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.