C語言中對記憶體的感悟

2021-09-10 22:50:50 字數 1013 閱讀 2771

(1)電腦程式 = ** + 資料

**就是函式,資料就是全域性變數、區域性變數。

(2)馮諾依曼結構:將**和資料存放在一起。哈弗結構:將資料和**分開存放。**是不變的(存放在rom唯讀),資料是隨時可變的(存放在ram隨機儲存器),所以分開放的好處就可以方便資料管理,還可以避免**被無意識修改導致的系統崩潰。

(3)在微控制器中,程式**放在rom(flash)中,資料放在ram中,微控制器採用sram,sram不需要初始化就可以使用,dram需要先初始化再使用。

(4)內存在程式設計中天然是用來存放變數的,因為有記憶體,所以c語言才能定義變數。因此記憶體是用來儲存可變資料的。

(5)記憶體單元的大小單位有4個,從小到大是:位《位元組《字。位就代表二進位制位。

(6)記憶體編制是以位元組為單位。

(7)資料型別是用來定義變數的,而這些變數需要儲存運算在記憶體中。所以資料型別必須和記憶體相匹配才能獲得最好的效能。32位系統本身配合記憶體是32位,這樣硬體配置最適合32位的int型變數,訪問效率最高。同樣也可以定義8位或者16位型別變數,但是實際上訪問效率不高。

(8)說到資料型別就要想到兩點:1.長度,2.解析方式。int a 的解讀方法是:a實際是乙個位址,由編譯器自動分配該位址。例如這個位址是0,那麼int 0就表示從位址0開始0,1,2,3都是該變數佔的空間(長度),又因為記憶體編制是以位元組為單位,所以也就是4位元組(32位)。這0 1 2 3位址中存放的是乙個int型變數。

(9)乙個函式的函式名字實際上也就是這段**的首位址。

(10)定義結構體最基本的方法:

struct ages             //定義結構體型別ages

;/************定義完型別還得定義變數後才可以使用**************/

struct ages age; //定義變數age

/************這樣就可以給成員賦值了**************/

age.age1 = 10;

age.age2 = 20;

詳解C語言中的記憶體四區模型及結構體對記憶體的使用

記憶體四區 1 區 區code,程式被作業系統載入到記憶體的時候,所有的可執行 都載入到 區,也叫 段,這塊記憶體是不可以在執行期間修改的。2 靜態區 所有的全域性變數以及程式中的靜態變數都儲存到靜態區。3 棧區 棧stack是一種先進後出的記憶體結構,所有的自動變數,函式的形參都是由編譯器自動放出...

C語言中的記憶體分類

1 棧 stack 由編譯器自動分配釋放,存放 函式的引數值 區域性變數的值 返回位址等,其操作方式類似於資料結果中的棧。棧又稱堆疊,是使用者存放程式臨時建立的區域性變數,也就是說我們函式括弧 中定義的變數 但不包括static 宣告的變數,static 意味著在資料段中存放變數 除此以外,在函式被...

C語言中的記憶體對齊

這階段一直想寫一篇部落格,其實有好多東西,先寫一下c語言中的記憶體對齊吧。大家都知道,在c語言中定義乙個變數,char是占用乙個位元組的,int占用四個位元組,float占用四個位元組,double占用八個位元組,short占用兩個位元組,long int占用四個位元組,long long神馬的是6...