ZHCUAV8W january 1998 – march 2023 66AK2E05 , 66AK2H06 , 66AK2H12 , 66AK2H14 , AM1705 , AM1707 , AM1802 , AM1806 , AM1808 , AM1810 , AM5K2E04 , OMAP-L132 , OMAP-L137 , OMAP-L138 , SM470R1B1M-HT , TMS470R1A288 , TMS470R1A384 , TMS470R1A64 , TMS470R1B1M , TMS470R1B512 , TMS470R1B768
ARM 編譯器隨附的運(yùn)行時(shí)支持庫(kù)包含幾個(gè)函數(shù)(例如 malloc、calloc 和 realloc),這些函數(shù)允許您在運(yùn)行時(shí)為變量動(dòng)態(tài)地分配存儲(chǔ)器。
內(nèi)存是從 .sysmem 段中定義的全局池(或堆)分配的。可以在鏈接器命令中使用heap_size=size 選項(xiàng)來(lái)更改 .sysmem 段的大小。鏈接器還會(huì)創(chuàng)建一個(gè)全局符號(hào) __TI_SYSMEM_SIZE,并為其分配一個(gè)等于堆大小的值(以字節(jié)為單位)。默認(rèn)大小為 2048 字節(jié)。有關(guān) --heap_size 選項(xiàng)的更多信息,請(qǐng)參閱 ARM 匯編語(yǔ)言工具用戶指南 中的鏈接器說(shuō)明一章。
如果您使用任何 C I/O 函數(shù),RTS 庫(kù)會(huì)為您訪問(wèn)的每個(gè)文件分配一個(gè) I/O 緩沖區(qū)。這個(gè)緩沖區(qū)將比BUFSIZ 大一點(diǎn),BUFSIZ 在 stdio.h 中定義,默認(rèn)為 256)。確保為這些緩沖區(qū)分配了足夠大的堆或使用 setvbuf 將緩沖區(qū)更改為靜態(tài)分配的緩沖區(qū)。
動(dòng)態(tài)分配的對(duì)象并非采用直接尋址方式(始終使用指針訪問(wèn)),并且存儲(chǔ)器池位于單獨(dú)的段(.sysmem)中。因此,動(dòng)態(tài)存儲(chǔ)器池的大小僅受系統(tǒng)中可用存儲(chǔ)器大小的限制。為了節(jié)省 .bss 段的空間,可以從堆中分配大型數(shù)組,而不是將它們定義為全局或靜態(tài)數(shù)組。例如,不是定義如下:
struct big table[100];而是改用指針并調(diào)用 malloc 函數(shù):
struct big *table
table = (struct big *)malloc(100*sizeof(struct big));當(dāng)從堆進(jìn)行分配時(shí),請(qǐng)確保堆的大小足夠滿足分配要求。在分配可變長(zhǎng)度數(shù)組時(shí),這一點(diǎn)尤為重要。