c語(yǔ)言在內(nèi)存中如何儲(chǔ)存:存儲(chǔ)分配與引用
夕逆IT
- 開發(fā)語(yǔ)言
- 2025-04-04 05:50:17
- 1

c語(yǔ)言數(shù)組在內(nèi)存中是怎么分配的 數(shù)組x在內(nèi)存中所占字節(jié)數(shù)為20。數(shù)組在定義的時(shí)候就已經(jīng)分配了內(nèi)存,由于定義的數(shù)組x的空間長(zhǎng)度為5,因此數(shù)組x在內(nèi)存中所占用的字節(jié)數(shù)為4*...
c語(yǔ)言數(shù)組在內(nèi)存中是怎么分配的
數(shù)組x在內(nèi)存中所占字節(jié)數(shù)為20。數(shù)組在定義的時(shí)候就已經(jīng)分配了內(nèi)存,由于定義的數(shù)組x的空間長(zhǎng)度為5,因此數(shù)組x在內(nèi)存中所占用的字節(jié)數(shù)為4*5也就是20個(gè)字節(jié)。
首先聲明變量了是有內(nèi)存分配的。如果定義數(shù)組后可以得到連續(xù)的內(nèi)存分配(有時(shí)候特別占用空間)。所以C語(yǔ)言出了鏈表(可以不連續(xù)的村一組數(shù)據(jù))。下面是C語(yǔ)言內(nèi)存分配特性,可以參考。C中內(nèi)存分為四個(gè)區(qū) 棧:用來(lái)存放函數(shù)的形參和函數(shù)內(nèi)的局部變量。由編譯器分配空間,在函數(shù)完后由編譯器自動(dòng)釋放。
在C語(yǔ)言中,基本數(shù)據(jù)類型char占據(jù)一個(gè)字節(jié)的內(nèi)存空間。數(shù)組char u1[5]因此占用5個(gè)字節(jié)的內(nèi)存。浮點(diǎn)數(shù)float在內(nèi)存中的存儲(chǔ)需要4個(gè)字節(jié)。數(shù)組float u2[2]則總共占用8個(gè)字節(jié),這是因?yàn)樗藘蓚€(gè)float類型的元素。深入理解C語(yǔ)言數(shù)據(jù)類型的內(nèi)存占用情況對(duì)于編程至關(guān)重要。
在c語(yǔ)言里二維數(shù)組元素在內(nèi)存中是按行存放的。二維數(shù)組A[m][n],這是一個(gè)m行,n列的二維數(shù)組。
在C語(yǔ)言中,數(shù)組名用于表示數(shù)組所存放的內(nèi)存區(qū)域,這塊內(nèi)存通常是在棧上靜態(tài)分配的,而非通過(guò)static關(guān)鍵字分配的。數(shù)組名實(shí)際上是這塊內(nèi)存的首,它指向了數(shù)組的起始位置。因此,數(shù)組名可以被看作是一個(gè),而且是一個(gè)不能修改的常量,具體來(lái)說(shuō),就是常量。
這個(gè)可以被賦給一個(gè)指針變量,然后通過(guò)這個(gè)指針訪問內(nèi)存。由于C語(yǔ)言中char代表一個(gè)字節(jié),malloc最初返回的是char*類型的指針,但ANSI標(biāo)準(zhǔn)引入了void*作為更通用的指針類型。使用void*時(shí),需要顯式指定正確的類型,如double*,以避免類型錯(cuò)誤。malloc在找不到所需空間時(shí)會(huì)返回NULL。
C語(yǔ)言中全局變量存放在內(nèi)存空間中那個(gè)位置
從靜態(tài)存儲(chǔ)區(qū)域分配 由編譯器自動(dòng)分配和釋放,在程序編譯的時(shí)候就已經(jīng)分配好內(nèi)存,這塊內(nèi)存在程序的整個(gè)運(yùn)行期間都存在,直到整個(gè)程序運(yùn)行結(jié)束時(shí)才被釋放,如全局變量與 static 變量。
\x0d\x0a \x0d\x0a全局變量全部存放在靜態(tài)存儲(chǔ)區(qū),在程序開始時(shí)給全局變量分配存儲(chǔ)區(qū),程序行完畢就釋放。
局部變量則被存儲(chǔ)在棧區(qū),每個(gè)函數(shù)調(diào)用時(shí),都會(huì)為該函數(shù)創(chuàng)建一個(gè)新的棧幀,局部變量在該棧幀中分配存儲(chǔ)空間。當(dāng)函數(shù)完畢并返回時(shí),該棧幀會(huì)被銷毀,局部變量也隨之失效。因此,局部變量的生命周期僅限于函數(shù)期間。堆區(qū)主要用于動(dòng)態(tài)分配的內(nèi)存。
C語(yǔ)言中全局變量的儲(chǔ)存類別是靜態(tài)存儲(chǔ)區(qū)。由某對(duì)象或某個(gè)函數(shù)所創(chuàng)建的變量通常都是局部變量,只能被內(nèi)部引用,而無(wú)法被其它對(duì)象或函數(shù)引用。全局變量既可以是某對(duì)象函數(shù)創(chuàng)建,也可以是在本程序任何地方創(chuàng)建。全局變量是可以被本程序所有對(duì)象或函數(shù)引用。
內(nèi)存中的位置:靜態(tài)存儲(chǔ)區(qū)(靜態(tài)存儲(chǔ)區(qū)在整個(gè)程序運(yùn)行期間都存在)2)初始化:未經(jīng)初始化的全局靜態(tài)變量會(huì)被程序自動(dòng)初始化為0(自動(dòng)對(duì)象的值是任意的,除非他被顯示初始化)3)作用域:全局靜態(tài)變量在聲明他的文件之外是不可見的。準(zhǔn)確地講從定義之處開始到文件結(jié)尾。
首先,C語(yǔ)言五大內(nèi)存分區(qū)包括:靜態(tài)內(nèi)存、動(dòng)態(tài)內(nèi)存、棧內(nèi)存、堆內(nèi)存和文件I/O內(nèi)存。靜態(tài)內(nèi)存用于存儲(chǔ)全局變量和靜態(tài)變量,動(dòng)態(tài)內(nèi)存由new和malloc函數(shù)分配,棧內(nèi)存用于函數(shù)調(diào)用時(shí)的局部變量和函數(shù)參數(shù),堆內(nèi)存用于動(dòng)態(tài)分配和管理,文件I/O內(nèi)存用于文件讀寫操作。
本文鏈接:http://m.tiantaijiaoyu.cn/kaifa/873152.html