C語言對乙個變數取位址是真實的位址嗎?

時間 2021-12-20 16:30:48

1樓:碼農的荒島求生

這要看情況,看什麼情況?

1,是否裝有作業系統

2,作業系統是否支援虛擬記憶體如果沒有啥作業系統或裝有作業系統但不支援虛擬記憶體,那麼你在C語言中對變數取位址得到的就是真實的物理記憶體位址。

如果作業系統支援虛擬記憶體,那麼你獲取到的就不再是真實的物理記憶體位址,而是邏輯位址。

2樓:劉世超

如果是在沒有MMU的機器上,比如CORTEX M0上,那個位址就是實際的實體地址,可以是記憶體也可以是快閃儲存器,和燒錄時用的位址一樣。

在沒有隨機進城位址保護的機器上,比如Win98,通過頁基址可以換算到真實實體地址。

3樓:泥偶

你觸發了未定義行為。

能取到,不能取到,或者程式崩潰;這都是硬體、作業系統、編譯器的實現細節。好的程式設計不應該依賴於這些(硬體、作業系統、編譯器的實現細節)。

結論,底線是這樣的,如果你不懂自己在做什麼,就別做;搞懂了之後再做。

4樓:ArtoriasPhD

有作業系統的話常規操作取位址都是虛擬位址,是作業系統分配的,除非用底層函式才能看到真實位址。

嵌入式的baremetal或者很多的實時作業系統,返回的就是真實記憶體位址。

在c中當定義乙個變數並對其取位址的時候電腦發生了什麼?

求知慾旺盛是好事,但以後不懂的東西更多,你根本不需要立馬知道答案,你只需要記下來以後自然就學到了。cs知識是網狀的,你多學才能聯絡起來。總結一下上面的回答,簡單說就是這個問題暫時不用深究,以後去看一下微機原理就明白了。拿我個人來說,高一接觸的C 大三才學微機原理,一點都不影響我中間5年寫程式。人家問...

c語言中整型變數的取值範圍是怎麼取的?為什麼是負的二的七次方到二的七次方減一?

調皮的李先生 我認為是這樣的 1byte等於8bit,也就是8個0或1,如 或11111111。其中第乙個數代表的意思是該數為正還是負,為1時代表負,為0時代表正。例如 00000001表示該數為1.至於為什麼是 2 7 2 7 1,說明一下2 7等於128,所以2 7 1等於127 因為11111...

C語言記憶體中是否存在乙個區域,儲存著變數的符號,變數的型別和變數的首位址?

fx991ESplus 沒有,編譯器在編譯的時候就已經完成了變數 函式名到實際位址 或者說是偏移量 的轉換了。分割線順便提乙個有趣的事情,vs的編譯器為了能夠讓程式設計師較快的查出陣列下標越界之類的bug,在debug模式下分配記憶體的時候,每個陣列 變數之間都留下一大塊空白,裡面儲存著特定的資訊。...