欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

C語言中,為什么要設(shè)置數(shù)據(jù)類型?

劉柏宏2年前18瀏覽0評論

這個問題涉及到內(nèi)存分配的原理,有點晦澀難懂。客官請泡好茶聽我慢慢道來。

運算過程的概略

跟執(zhí)行程序有關(guān)的計算機部件主要是CPU,寄存器和內(nèi)存。CPU是負責(zé)執(zhí)行程序指令的核心部件,在內(nèi)置時鐘的驅(qū)動下,它從寄存器中取得指令和數(shù)據(jù)運算后把結(jié)果寫回寄存器。這些指令是什么樣子的呢?這些指令都是一些操作碼,有管邏輯運算的,有管輸入輸出的,特別是有管向內(nèi)存的堆和棧里讀寫數(shù)據(jù)的。之后會講到堆和棧和變量的關(guān)系,所以請記住這兩個字。內(nèi)存中存放著程序指令和數(shù)據(jù),這些東東通過寄存器傳輸給CPU同時把運算結(jié)果保存下來。

內(nèi)存結(jié)構(gòu)概述

我們所寫的c語言代碼,經(jīng)編譯連接之后被翻譯成了一連串的操作指令。在執(zhí)行的時候,這些指令被讀入內(nèi)存。程序在內(nèi)存中是這樣存放的,代碼段/數(shù)據(jù)區(qū)/堆/棧。其中,

  • 數(shù)據(jù)區(qū)用來存放全局變量
  • 堆是可動態(tài)申請的內(nèi)存區(qū)域,順序上從前向后。需要注意的是這部分內(nèi)存需要動態(tài)清理。
  • 棧用來保存局部變量,程序加載時已經(jīng)分配(靜態(tài)分配)完畢,順序上是自后向前。

變量類型和內(nèi)存分配的關(guān)系

終于說到正題了。變量類型既有邏輯上的意義,也有物理上的用途。在邏輯上,字符和數(shù)字是不同的概念,有必要做區(qū)分,在物理上,變量類型反映了所需內(nèi)存區(qū)域的大小,系統(tǒng)可根據(jù)變量類型在數(shù)據(jù)區(qū)和堆棧區(qū)分配相應(yīng)的內(nèi)存。各種語言在處理內(nèi)存分配上都是大同小異的。因為內(nèi)存分配是由操作系統(tǒng)決定的。不過C語言中需要用顯式處理內(nèi)存,比如,一個指針變量會被放在棧里,而對它做初期化后,這個變量中就存放了一個堆里的內(nèi)存地址,如果不釋放指針,這段內(nèi)存將一直被占用。Java的內(nèi)存結(jié)構(gòu)也是類似的,它把類放在棧里,由類申請堆里的內(nèi)存,但它使用了GC自動清理內(nèi)存,隱藏或者叫封裝了內(nèi)存申請和釋放的指令。一些腳本語言也通過不同的方式把內(nèi)存申請和釋放的過程加以封裝。使得變量類型單純地反映了其邏輯上的含義。

對程序設(shè)計有興趣的小伙伴可以提出問題,我有很多故事可以分享哦。