- N +

局部變量和全局變量的區(qū)別?怎么區(qū)分全局變量和局部變量

大家好,如果您還對(duì)局部變量和全局變量的區(qū)別不太了解,沒(méi)有關(guān)系,今天就由本站為大家分享局部變量和全局變量的區(qū)別的知識(shí),包括怎么區(qū)分全局變量和局部變量的問(wèn)題都會(huì)給大家分析到,還望可以解決大家的問(wèn)題,下面我們就開(kāi)始吧!

靜態(tài)全局變量和全局變量的區(qū)別

首先說(shuō)下變量類型,大類上分為局部變量和全局變量?jī)煞N。之所以有局部變量是因?yàn)閷?duì)于一段代碼(函數(shù))來(lái)說(shuō)要狀態(tài)歸零。

他們的區(qū)別就是變量的作用域和生命周期不同。作用域就是變量的可使用范圍,舉個(gè)例子來(lái)說(shuō)市委書(shū)記的縣委書(shū)記都是書(shū)記,但是他們管的范圍不同,縣委書(shū)記到了市里就不起作用了。生命周期嘛意思很明顯,程序中你的變量是局部變量,超出了作用范圍后生命也隨之結(jié)束。自動(dòng)變量就當(dāng)做一般的局部變量來(lái)看好了,反正我寫(xiě)程序從來(lái)沒(méi)用過(guò)。

最后說(shuō)下靜態(tài)變量,這就要從程序的內(nèi)存區(qū)域來(lái)說(shuō)了,靜態(tài)變量的在內(nèi)存中是在堆上分配,生命周期和程序一樣長(zhǎng),用他修飾局部變量后局部變量的生命周期也變長(zhǎng)了,但是作用范圍還是不能超出原有的范圍

ps:半路出家,很多東西都是按照測(cè)試中得出的結(jié)論,如有錯(cuò)誤請(qǐng)?jiān)?/p>

全局變量和局部變量有什么區(qū)別是怎么實(shí)現(xiàn)的

1、全局變量的作用用這個(gè)程序塊,而局部變量作用于當(dāng)前函數(shù)2、前者在內(nèi)存中分配在全局?jǐn)?shù)據(jù)區(qū),后者分配在棧區(qū)3、生命周期不同:全局變量隨主程序創(chuàng)建和創(chuàng)建,隨主程序銷毀而銷毀,局部變量在局部函數(shù)內(nèi)部,甚至局部循環(huán)體等內(nèi)部存在,退出就不存在4、使用方式不同:通過(guò)聲明后全局變量程序的各個(gè)部分都可以用到,局部變量只能在局部使用操作系統(tǒng)和編譯器通過(guò)內(nèi)存分配的位置來(lái)知道的全局變量分配在全局?jǐn)?shù)據(jù)段,并且在程序被運(yùn)行的時(shí)候就被加載。

編譯器通過(guò)語(yǔ)法詞法的分析,判斷出是全局變量還是局部變量。

如果是全局變量的話,編譯器在將源代碼翻譯成二進(jìn)制代碼時(shí)就為全局變量分配好一個(gè)虛擬地址(windows下0x00400000以上的地址,也就是所說(shuō)的全局區(qū)),所以程序在對(duì)全局變量的操作時(shí)是對(duì)一個(gè)硬編碼的地址操做。

局部變量的話,編譯時(shí)不分配空間,而是以相對(duì)于ebp或esp的偏移來(lái)表示局部變量的地址,所以局部變量?jī)?nèi)存是在局部變量所在的函數(shù)被調(diào)用時(shí)才真正分配。

以匯編的角度來(lái)看:函數(shù)執(zhí)行時(shí),局部變量在棧中分配,函數(shù)調(diào)用完畢釋放局部變量對(duì)應(yīng)的內(nèi)存,另外局部變量可以直接分配在寄存器中。

操作系統(tǒng)通過(guò)變量的分配地址就可以判斷出是局部變量和全局變量。

static全局變量與普通的區(qū)別,局部變量呢 函數(shù)呢

static全局變量是所有程序都能訪問(wèn),普通的是類內(nèi)部可以訪問(wèn),靜態(tài)變量變量賦值后會(huì)一直存在,除非應(yīng)用程序重啟或回收值才會(huì)失效,靜態(tài)變量都是單例模式在多線程下會(huì)有線程安全問(wèn)題,造成變量污染。

靜態(tài)函數(shù)是不用實(shí)例化類就可以直接調(diào)用,靜態(tài)方法是沒(méi)有線程安全問(wèn)題的,是安全的。

局部變量和全局變量的區(qū)別是什么

具體來(lái)說(shuō),全局變量和局部變量的區(qū)別如下:

1.作用域不同:全局變量的作用域?yàn)檎麄€(gè)程序,而局部變量的作用域?yàn)楫?dāng)前函數(shù)或循環(huán)等

2.內(nèi)存存儲(chǔ)方式不同:全局變量存儲(chǔ)在全局?jǐn)?shù)據(jù)區(qū)中,局部變量存儲(chǔ)在棧區(qū)

3.生命期不同:全局變量的生命期和主程序一樣,隨程序的銷毀而銷毀,局部變量在函數(shù)內(nèi)部或循環(huán)內(nèi)部,隨函數(shù)的退出或循環(huán)退出就不存在了

4.使用方式不同:全局變量在聲明后程序的各個(gè)部分都可以用到,但是局部變量只能在局部使用。函數(shù)內(nèi)部會(huì)優(yōu)先使用局部變量再使用全局變量

全局變量和局部變量的在內(nèi)存的區(qū)別

全局變量和局部變量的區(qū)別如下:

1.作用域不同:全局變量的作用域?yàn)檎麄€(gè)程序,而局部變量的作用域?yàn)楫?dāng)前函數(shù)或循環(huán)等2.內(nèi)存存儲(chǔ)方式不同:全局變量存儲(chǔ)在全局?jǐn)?shù)據(jù)區(qū)中,局部變量存儲(chǔ)在棧區(qū)3.生命期不同:全局變量的生命期和主程序一樣,隨程序的銷毀而銷毀,局部變量在函數(shù)內(nèi)部或循環(huán)內(nèi)部,隨函數(shù)的退出或循環(huán)退出就不存在了4.使用方式不同:全局變量在聲明后程序的各個(gè)部分都可以用到,但是局部變量只能在局部使用。函數(shù)內(nèi)部會(huì)優(yōu)先使用局部變量再使用全局變量。

局部變量可以與全局變量重名,但是局部變量會(huì)屏蔽全局變量。全局變量是編程術(shù)語(yǔ)中的一種,源自于變量之分。變量分為局部與全局,局部變量又可稱之為內(nèi)部變量。

由某對(duì)象或某個(gè)函數(shù)所創(chuàng)建的變量通常都是局部變量,只能被內(nèi)部引用,而無(wú)法被其它對(duì)象或函數(shù)引用。

全局變量既可以是某對(duì)象函數(shù)創(chuàng)建,也可以是在本程序任何地方創(chuàng)建。全局變量是可以被本程序所有對(duì)象或函數(shù)引用。

全局變量和局部變量哪個(gè)占用內(nèi)存大

同類型的全局變量和局部變量占用內(nèi)存空間一樣大。兩者間區(qū)別在于以下幾點(diǎn):

1.存儲(chǔ)區(qū)間不同,全局變量全部存放在靜態(tài)存儲(chǔ)區(qū),在程序開(kāi)始執(zhí)行時(shí)給全局變量分配存儲(chǔ)區(qū),程序行完畢就釋放,局部變量和參數(shù)是存儲(chǔ)在棧區(qū),屬于動(dòng)態(tài)存儲(chǔ)區(qū),棧區(qū)的變量卻是由高地址向低地址存放的。

2.作用域不同,局部變量:定義在函數(shù)體內(nèi)部的變量,作用域僅限于函數(shù)體內(nèi)部,全局變量它的作用域是同一個(gè)程序文件都可以調(diào)用。

3.生命周期,全局變量是一直到程序結(jié)束,局部變量是定義其的函數(shù)結(jié)束。

關(guān)于局部變量和全局變量的區(qū)別的內(nèi)容到此結(jié)束,希望對(duì)大家有所幫助。

返回列表
上一篇:
下一篇: