C語言記憶體

2021-10-21 02:25:48 字數 756 閱讀 9043

1.一直對c語言記憶體的分布,不太清楚,模模糊糊,查了一些資料,簡單敘述下,以後工作中再結合工作看看

一、iar記憶體的分布,通過看生成的map檔案,分三個段;

1、位址從低到高,先是**段(有對應的位址),.主要是text(ro code)跟ro data(const唯讀資料);一般**段的資料都是儲存在記憶體的rom區,也就是flash區;

2、接下來是資料段,主要是.data(已初始化的全域性變數、靜態全域性、區域性變數)、.bss段(未初始化的全域性變數或初始化為零的全域性變數、靜態全域性、區域性變數);bss段,系統並不會給該段的資料分配空間,只是記錄資料所需的空間大小;data段需要占用,內容由程式初始化;一般資料段的資料是儲存在記憶體的ram區;

3、最後是堆疊段,那主要就是堆跟棧,棧stack主要儲存區域性變數;堆heap手動分配記憶體;儲存在記憶體的ram區;

二、通過看map檔案最後一塊,條目列表,主要是兩塊:

1、函式介面,全域性函式、靜態函式;全域性函式-code gb(global);靜態函式-code lc(local),知道他們的位址;除錯程式出錯的時候可以跟蹤定位下;

2、變數,全域性變數、靜態變數;全域性變數-data gb(global);靜態變數--data lc(local);

2.記憶體主要是指ram跟rom

通過看.icf檔案,可以知道記憶體的大小,及ram、rom的分配大小還有堆疊的大小跟位址;可以知道ro code、ro data、rw data儲存的位址空間;

C語言記憶體

返回viod 型別的指標,同時為未初始化的記憶體空間。需要顯式的進行型別轉換,以及分配失敗處理,初始化 int p null 型別轉換 p int malloc sizeof int 分配失敗處理 if p null else 初始化處理 memset p,0,sizeof int 初始化處理 me...

C語言記憶體

1.ram和rom都是半導體儲存器,乙個叫隨機儲存器掉電丟失,乙個叫唯讀儲存器掉電儲存。2.ram又分為靜態和動態,靜態的速度非常快,動態的慢但是便宜,ddr ram是電腦中常用儲存器,動態記憶體中的動態是因為乙個dram單元儲存的是0還是1取決於電容是否有電荷,所以時間一長容易電荷變化,所以需要加...

C語言記憶體

全域性變數 外部變數 出現在 塊 之外的變數就是全域性變數。區域性變數 自動變數 一般情況下,塊 內部定義的變數就是自動變數,也可使用auto顯示定義。靜態變數 是指記憶體位置在程式執行期間一直不改變的變數,用關鍵字static修飾。塊內部的靜態變數只能被這個 塊內部訪問,塊外部的靜態變數只能被定義...