計算機基礎之變數在記憶體中的儲存

2021-08-29 16:19:32 字數 975 閱讀 4323

cpu是通過三條匯流排與記憶體打交道的,分別是位址匯流排,控制匯流排和資料匯流排,位址匯流排用於定址,控制匯流排用於cpu讀寫控制,資料匯流排用於傳輸資料。

假設位址匯流排有32條,那麼可定址的範圍就是2的32次方,也就是2的32次方個記憶體單元,而每個記憶體單元都會有與之對應的不重複的記憶體位址,也就是記憶體編號,編號的起始索引由0開始,所以其編號最大值是2^32 - 1。

指標就是位址,指標變數就是位址變數,用於存放位址的變數,2^32 - 1= 4294967295這個數值剛好是int型別可以存放的最大數值,也就是4個位元組可以表示的範圍,所以說指標變數統一只佔4個位元組,這樣的設計很合理,用十六進製制表示其範圍就是0x00000000 -----0xffffffff,這和它指向的物件佔幾個位元組毫無關聯。

乙個int佔4個位元組,int i = 100;表示在記憶體中開闢了4個位元組的空間用於儲存100這個值,而100是以二進位制形式存放在記憶體單元中的,100的二進位制表示為00000000 00000000 00000000 01100100,假設被儲存在編號為0x00000000到0x0000003這四個記憶體位址所對應的記憶體單元中,又假設以小端模式進行儲存的,那麼下圖就可以具體體現100是如何被儲存的

那麼問題又來了,i所對應的記憶體單元位址是多少呢?是0x00000000 - 0x00000003中的哪乙個呢?用乙個通俗的問題描述就是,假設我們有乙個指向int型別的指標變數p,int*p,此時將i變數的位址賦給p,即p = &i,這時的p對應的值又該是多少呢?答案實際上是第乙個位元組的位址即0x00000000。

最後呢,要說明一點就是,文章中表述的內容不是特別的嚴謹,僅起拋磚引玉的之用,可以將之作為雛形看待,因為我並沒有提到原碼、反碼和補碼的概念,有興趣的讀者可以自行查閱相關資料喲。

變數在記憶體中的儲存

c 中變數在記憶體中的儲存 一 記憶體大致可以分為三部分 區 堆疊區 靜態資料段。c和c 中有全域性變數,靜態變數以及區域性變數等幾類。全域性變數和靜態變數是在編譯的時候就已經分配好在資料段,也就是說在執行main函式之前就已經分配好了位址,如果定義的時候已經初始化,那麼就存放初始化的值,如果沒有初...

變數在記憶體中的儲存

package com.gxlq.ren 該類表示荊楚的老師 public class jcteacher public void playgame 8種基本型別 整數,小數,布林型別,char 字元型別 n 復合 整數 byte 1 short 2 int 4 long 8 小數 float 4 ...

計算機基礎 記憶體

在多道程式環境下,要使程式執行,必須建立程序,而建立程序就要將程式和資料裝入記憶體。乙個使用者源程式要變為在記憶體中可執行的程式,通常要進行以下處理 裝入 由裝入程式將裝入模組裝入記憶體。可重定位裝入 多個程式的起始位址都從0開始,程式中的其他位址都是相對於起始位址的。裝入時將目標程式中的指令和資料...