楔子 函數是任何一門編程語言都具備的基本元素,它可以將多個動作組合起來,一個函數代表了一系列的動作。當然我們之前說函數也是一個變量,該變量指向一個函數。而且在調用函數時會干什么來着,沒錯,要在運行時棧中創建棧幀,用於函數的執行。 那么下面就來看看函數在C中是如何實現的,生得一副什么模樣 ...
楔子 之前分析了那么久的虛擬機,多少會有點無聊,那么本次我們來介紹一個好玩的,看看如何修改 Python 解釋器的底層數據結構和運行時。了解虛擬機除了可以讓我們寫出更好的代碼之外,還可以對 Python 進行改造。舉個栗子: 是不是很有趣呢 通過 Python 內置的 ctypes 模塊即可做到,而具體實現方式我們一會兒說。所以本次我們的工具就是 ctypes 模塊 Python 版本為 . ,需 ...
2021-10-31 13:50 0 1298 推薦指數:
楔子 函數是任何一門編程語言都具備的基本元素,它可以將多個動作組合起來,一個函數代表了一系列的動作。當然我們之前說函數也是一個變量,該變量指向一個函數。而且在調用函數時會干什么來着,沒錯,要在運行時棧中創建棧幀,用於函數的執行。 那么下面就來看看函數在C中是如何實現的,生得一副什么模樣 ...
楔子 我們之前分析了Python的核心--字節碼、以及虛擬機的剖析工作,但這僅僅只是一部分,而其余的部分則被遮在了幕后。記得我們在分析虛擬機的時候,曾這么說過: 當Python啟動后,首先會進行 "運行時環境" 的初始化,而關於 "運行時環境" 的初始化是一個非常復雜的過程 ...
楔子 這一次我們就來剖析Python運行字節碼的原理,我們知道Python虛擬機是Python的核心,在源代碼被編譯成PyCodeObject對象時,就將由Python虛擬機接手整個工作。Python虛擬機會從PyCodeObject中讀取字節碼,並在當前的上下文中執行,直到所有的字節碼都被 ...
楔子 在上一篇中我們說到了Python中的對象在底層的數據結構,我們知道Python底層通過PyObject和PyTypeObject完成了C++所提供的對象的多態特性。在Python中創建一個對象,會分配內存並進行初始化,然后Python會用一個PyObject *來保存和維護這個對象 ...
楔子 不少編程語言中的"字符串"都是使用字符數組(或者稱字符序列)來表示,比如C語言和go語言就是這樣。 一個字節最多能表示256個字符,所以對於英文來說足夠了,因此一個英文字符占一個字節即可 ...
楔子 Python的字典是一種映射型容器對象,保存了鍵(key)到值(value)的映射關系。通過字典,我們可以快速的實現值的查找,json這種數據結構也是借鑒了Python中的字典。而且字典在Python中是經過高度優化的,因為Python底層也在大量的使用字典這種數據結構。 那么這次 ...
Python中的整型在底層是怎么定義的就行了。 int實例對象的底層實現 Python中的整數底層對應的結構 ...
楔子 這一次我們分析一下Python中的字符串,首先Python中的字符串是一個變長對象,因為不同長度的字符串所占的內存空間是不一樣的;但同時字符串又是一個不可變對象,因為一旦創建就不可以再修改了。 而Python中的字符串是通過unicode來表示的,因此在底層對應的結構體 ...