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 編譯器將內(nèi)存視為單線性塊,該塊被劃分為代碼子塊和數(shù)據(jù)子塊。C 程序生成的每個代碼子塊或數(shù)據(jù)子塊都放置在其自己的連續(xù)內(nèi)存空間中。編譯器假設(shè)目標(biāo)內(nèi)存中有完整的 32 位地址空間可用。
由鏈接器而不是編譯器定義內(nèi)存映射并將代碼和數(shù)據(jù)分配到目標(biāo)內(nèi)存中。編譯器不考慮可用內(nèi)存的類型、不考慮代碼或數(shù)據(jù)(漏洞)的任何不可用的位置,也不考慮為 I/O 或控制目的保留的任何位置。編譯器生成可重定位代碼,允許鏈接器將代碼和數(shù)據(jù)分配到合適的內(nèi)存空間中。例如,可以使用鏈接器將全局變量分配到片上 RAM 中或?qū)⒖蓤?zhí)行代碼分配到外部 ROM 中。可以將每個代碼塊或數(shù)據(jù)塊單獨(dú)分配到內(nèi)存中,但這不是通用做法(一個例外是內(nèi)存映射 I/O ,盡管可以使用 C/C++ 指針類型訪問物理存儲器位置)。