RT-Thread中支持靜態和動態兩種定義方式。
用線程來舉例的話,rt_thread_init對應靜態定義方式,rt_thread_create對應動態定義方式。
使用靜態定義方式時,必須先定義靜態的線程控制塊,並且定義好堆棧空間,然后調用rt_thread_init來完成線程的初始化工作。采用這種方式,線程控制塊和堆棧占用的內存會放在RW段,這段空間在編譯時就已經確定,它不是可以動態分配的,所以不能被釋放。而只能使用rt_thread_detach函數將該線程控制塊從對象管理器中脫離。
使用動態定義方式rt_thread_create時,RT-Thread會動態申請線程控制塊和堆棧空間。在編譯時,編譯器是不會感知到這段空間的,只有在程序運行時,RT-Thread才會從系統堆中申請分配這段內存空間,當不需要使用該線程時,調用rt_thread_delete函數就會將這段申請的內存空間重新釋放到內存堆中。
這兩種方式各有利弊,
靜態定義方式會占用RW空間,但是不需要動態分配內存,運行時效率高。
動態方式不會占用額外的RW空間,占用空間小,但是運行時需要動態分配內存,效率沒有靜態方式高。
總的來說,這兩種方式就是空間和時間效率的平衡,可以根據實際環境需求選擇采用具體的分配方式。