tbox新增64K微內核編譯模式

爲了進一步裁剪tbox,更好的適配嵌入式開發平臺,tbox新增了--micro=y的微模塊編譯選項git

若是啓用此編譯選項,那麼只會編譯tbox裏面較輕量的一些模塊,是的編譯後的庫大小,儘可能保證在64K左右。github

先來說講一些跟庫大小相關的編譯選項:算法

* `--smallest=y`: 通用平臺,最小編譯模式,會禁用全部第三方依賴庫,禁用全部擴展模塊,啓用最小化編譯優化(庫內部也會盡量節省內存使用)
* `--micro=y`: 專門針對嵌入式平臺設計,僅編譯最爲輕量的一些模塊,啓用最小化編譯優化(有可能會包含一些可選組件)

smallest和micro的區別在於,即便啓用了smallest禁用全部擴展模塊,可是仍是會內置比micro更多的經常使用組件用於平常基礎開發 而micro是專門爲嵌入式平臺設計,內置的默認組件更加的精簡,一些重量級的模塊就不放置進去了macos

所以若是要編譯最小tbox庫,只須要執行下面的配置:api

$ xmake f --micro=y 
$ xmake

若是要在micro下面啓用協程支持,只須要:bash

$ xmake f --micro=y --coroutine=y
$ xmake

進行編譯就好了,通常庫大小會控制在64K左右,目前內置模塊還不是不少,後續會進一步精簡優化,使其在64K內包含更多使用的模塊。less

目前微內核編譯模式支持的一些模塊有:socket

  • stackless線程庫(比stackfull版本更加輕量,每一個協程僅佔用幾十個bytes,切換效率也提高了5-6倍,macosx上1000w次切換隻須要40ms)
  • 輕量libc庫api支持(支持一些最長使用的接口)
  • 支持list_entry/single_list_entry單雙鏈容器(比list/single_list更加輕量,外置式,不會維護對象內存)
  • 原始socket接口操做
  • 文件操做相關api
  • dns地址解析、ipv四、ipv6等操做接口
  • bits數據操做和解析
  • 提供系統內存、連續靜態內存分配器(能夠指定tbox全部內存僅在一塊連續空間內分配,適用於內存資源有嚴格要求的場景)
  • 支持內存越界、泄漏檢測
  • 線程相關基礎接口
  • 提供單例、原子操做接口
  • 自旋鎖支持
  • 跨平臺__tb_thread_local__線程局部存儲支持
  • trace打印接口
  • 迭代器支持(目前僅用於list_entry/single_list_entry

關於micro編譯的更多支持模塊列表,見micro.lua優化

後續在保持庫大小不增長的前提下,還會增長更多輕量級模塊(例如:定時器、更多的容器和算法支持。。)lua


我的主頁:TBOOX開源工程

相關文章
相關標籤/搜索