您好,登錄后才能下訂單哦!
這篇文章給大家介紹Static局部變量與全局變量的區(qū)別是什么,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
Static局部變量與全局變量的區(qū)別?編譯后映射文件是否包含此類變量的地址?全局變量(外部變量)的說明之前再冠以static 就構成了靜 態(tài)的全局變量。全局變量本身就是靜態(tài)存儲方式, 靜態(tài)全局變量當然也是靜態(tài)存儲方式。這兩者在存儲方式上并無不同。這兩者的區(qū)別雖在于非靜態(tài)全局變量的作用域是整 個源程序, 當一個源程序由多個源文件組成時,非靜態(tài)的 全局變量在各個源文件中都是有效的。
而靜態(tài)全局變量則 限制了其作用域,即只在定義該變量的源文件內(nèi)有效, 在同一源程序的其它源文件中不能使用它。由于靜態(tài)全局 變量的作用域局限于一個源文件內(nèi),只能為該源文件內(nèi)的 函數(shù)公用,因此可以避免在其它源文件中引起錯誤。
從以上分析可以看出,把局部變量改變?yōu)殪o態(tài)變量后是改變了它的存儲方式即改變了它的生存期。把全局變量改變?yōu)殪o態(tài)變量后是改變了它的作用域,限制了它的使范圍。
static 函數(shù)與普通函數(shù)作用域不同。僅在本文件。只在當前源文件中使用的函數(shù)應該說明為內(nèi)部函數(shù) (static),內(nèi)部函數(shù)應該在當前源文件中說明和定義。對 于可在當前源文件以外使用的函數(shù),應該在一個頭文件中說明,要使用這些函數(shù)的源文件要包含這個頭文件
static 全局變量與普通的全局變量有什么區(qū)別:static 全局變量只初使化一次,防止在其他文件單元中被 引用;
static 局部變量和普通局部變量有什么區(qū)別:static 局部變量只被初始化一次,下一次依據(jù)上一次結果值;
static 函數(shù)與普通函數(shù)有什么區(qū)別:static 函數(shù)在存中只有一份,普通函數(shù)在每個被調(diào)用中維持一份拷貝程序的局部變量存在于(堆棧)中,全局變量存在于 (靜態(tài)區(qū))中,動態(tài)申請數(shù)據(jù)存在于(堆)中。extern 全局變量、static 全局變量和 static 局部變量的生存期都是“永久”,區(qū)別只是可見域不同。extern 全局 變量可見區(qū)域是工程,static 全局變量可見區(qū)域是文件,而 static 局部變量的可見區(qū)域是塊。從代碼維護角度來看,對extern 變量的修改可能會影 響所有代碼,對 static 全局變量的修改可能影響一個文件 中的代碼,而對static 變量的修改 可能影響一個塊的代 碼;因此在選擇變量類型時,優(yōu)先級是 static 局 部>static 全局>extern 全局。
但它們有著共同的缺點:使 用 了這些類型變量的函數(shù)將是不可重入的,不是線程安全的。在 C/C++標準庫中有很多函數(shù)都使用了static 局部變量,目前的實現(xiàn)中都為它們提供了兩套代 碼,單線程版本 使用 static 變量而多線程版本使用“線程全局變量”,比如rand,strtok等。 一個進程可用內(nèi)存空間為4G,可分在存放靜態(tài)數(shù)據(jù),代碼,系統(tǒng)內(nèi)存,堆,棧等。.活動記錄一般存放調(diào)用參數(shù)、返回地址等內(nèi)容。堆和棧最大的區(qū)別在于 堆是由低地址向 高地址分配內(nèi)存,而棧是由高向低。全局和靜態(tài)數(shù)據(jù)存放在全局數(shù)據(jù)區(qū),其余的在棧中,用malloc 或new分配的內(nèi)存位于堆中。一般來說棧在低地址,堆位于高地址
關于Static局部變量與全局變量的區(qū)別是什么就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。