Python3 str在記憶體中的儲存方式?

時間 2021-06-03 09:24:40

1樓:Coldwings

這種問題就應該去看原始碼。就算不看原始碼,看文件啊……對於Py3.5而言

enum

PyUnicode_Kind

;/* Return pointers to the canonical representation cast to unsigned char,

Py_UCS2, or Py_UCS4 for direct character access.

No checks are performed, use PyUnicode_KIND() before to ensure

these will work correctly. */

#define PyUnicode_1BYTE_DATA(op) ((Py_UCS1*)PyUnicode_DATA(op))

#define PyUnicode_2BYTE_DATA(op) ((Py_UCS2*)PyUnicode_DATA(op))

#define PyUnicode_4BYTE_DATA(op) ((Py_UCS4*)PyUnicode_DATA(op))

這裡可以看到定義了個PyUnicode_Kind的玩意,用來區分儲存元。仔細找原始碼樹來看的話,它分別對USC-1、USC-2、UCS-4三種不同的字符集分開儲存,並且各自有乙個庫來處理這事。

當然,對老一點的Py3的話是一併扔wchar_t陣列裡的,這就是OS和編譯器實現相關的事兒了。

linux swap分割槽中的內容在記憶體壓力恢復之後會怎樣?

學神來啦 建立乙個普通的linux分割槽 主分割槽 邏輯分割槽均可 fdisk dev sdb command m for help p disk dev sdb 8589 mb,8589934592 bytes 255 heads,63 sectors track,1044 cylinders,t...

java的String在記憶體中如何分配的?

陳肖恩 1.myString 是常量,通過編譯期直接定義到常量表中,new String 是執行期指令,基本上new出來的物件都在堆上。可以理解為編譯期常量表定義了 myString 字串,在執行期調取常量new出乙個String物件放到堆裡,兩者引用不一樣。2.字面量字串可以在編譯器優化,例如常量...

遊戲引擎中的Mesh類是否需要在記憶體中儲存頂點資料?

ArcEcho 這個其實看dx12的資源繫結會來的更清晰。dx12中最終在drawcall時設定給gpu的是VERTEX BUFFER VIEW,這個物件裡面包含gpu上的乙個vertual address。換言之就是就draw call而言只要保證gpu上有那麼一塊資料即可。在引擎層面就需要根據使...