關於C語言變數記憶體分配一些自己的理解。

2021-08-11 04:18:35 字數 678 閱讀 5014

以下僅僅是自己通過看書後的,自己的一些理解,有什麼問題歡迎指出。

首先說下記憶體,什麼是記憶體,什麼是位址? 打個比方,把記憶體比作一棟樓,這棟樓裡面有很多房間,每個房間都有標號。那麼,每個房間裡面的空間就是我們存放東西的地方,房間的標號就是我麼所說的位址。如果我們想要在這棟樓拿出乙個東西,那麼得首先知道房間的標號。所以也就是我們想在記憶體中取出乙個東西,首先必須知道位址。還有兩個名詞必須解釋下:定址空間和定址能力。定址空間就是房間的個數,定址能力,就是房間裡面能放多少東西。某一棟樓(記憶體)有32個房間(定址空間為32),每個房間只能放4臺儀器(定址能力為4)。

好了記憶體說完了,說下c語言中的問題,之前學習c語言,自已一直疑惑不解,比如我定義了乙個變數:int a=2; 那麼我在想,a在記憶體中到底是個什麼東西,其實,在你定義乙個變數之後,編譯器在編譯時會首先會進行掃瞄,然後生成乙個 符號表,這個符號表資訊量很多,有變數符號位址,作用域,型別等等。符號表中的位址就是這裡要關注的東西。意思就是,定義了乙個 整形變數 a,  那麼它在記憶體中肯定占有一定的空間,這個空間(房間)肯定會有乙個位址(標號)。假如後面想改變的a的內容,a=3; 首先找到a 的位址(符號表),在把3個值寫入這個位址。所以其實a這個東西,其實就是個位址,但是我們為什麼把a列印出來不是a的位址,而是a的值呢?這裡還關係到定址方式的問題,在這裡一般用的間接定址,意思就是把 a當作位址,取出這個位址中的東西。

C語言一些常用記憶體分配函式

首先看個問題程式 這裡用的是tc編譯器 include stdlib.h include stdio.h void main 輸出的結果是 8fc 1 8fe 2 這個程式編譯通過,執行正常,說它有問題,問題出在哪呢?首先通過malloc,建了乙個大小為2的堆,i指向的位址是8fc,i 1指向的位址...

C語言 關於系統記憶體分配機制的一些整理

指向字串常量的指標和字串陣列在使用時是有區別的。看下面兩個函式 執行通過,返回 hello world char ptrchar 執行錯誤,不能返回區域性變數 char arrchar 出現上面的原因在於指標pc指向的字串 hello world 存放在文字常量區,而陣列ac中存放的字串存放在棧區,...

關於C語言記憶體的一些理解

記憶體這個大話題 key 心裡一定要有記憶體的邏輯圖。程式是什麼?程式 資料 放在flash中 段,可變的資料 全域性變數 區域性變數 放在記憶體中。執行程式的目的是什麼?得到執行結果 關注執行過程 既要結果又要過程 為什麼需要記憶體?程式中有可變資料 全域性變數 區域性變數 這些可變資料就是放在記...