static在内存层面的作用_static的作用和内存划分?
有時希望函數中的局部變量的值在函數調用結束后不消失而繼續保留原值,即其占用的存儲單元不釋放,在下一次再調用的時候該變量已經有值。這時就應該指定該局部變量為靜態變量,用關鍵字 static 進行聲明。
static修飾變量
修飾局部變量1、讓局部變量只初始化一次。?????????????????????????????????????????????????????????????????????????????????? 2、局部變量在程序中只有一份內存????????????????????????????????????????????????????????????????????????????? 3、對局部變量用static聲明,把它分配在靜態存儲區,該變量在整個程序執行期間不釋放,其所分配的空間始終在???????????????????????????????????????????????????????????????????????????????????? 4、并不會改變局部變量的作用域,僅僅是改變了局部變量的生命周期(只到程序結束,這個局部變量才會銷毀)
修飾全局變量對全局變量用static聲明,則該變量的作用域只限于本文件模塊(全局變量的作用域僅限于當前文件,即被聲明的文件中)
例如:單例模式中使用的 static。
內存(定義)
可編程內存在基本上分為這樣的幾大部分:靜態存儲區、堆區和棧區。他們的功能不同,對他們使用方式也就不同。
靜態存儲區(全局存儲區):內存在程序編譯的時候就已經分配好,這塊內存在程序的整個運行期間都存在。它主要存放靜態數據、全局數據和常量。
描述:
全局變量、靜態變量會存儲在此區域。事實上全局變量也是靜態的,因此,也叫全局靜態存儲區。存儲方式: 初始化的全局變量跟靜態變量放在一片區域,未初始化的全局變量與靜態變量放在相鄰的另一片區域。
程序結束后由系統釋放。
棧區:在函數執行時,函數內局部變量的存儲單元都可以在棧上創建,函數執行結束時這些存儲單元自動被釋放。棧內存分配運算內置于處理器的指令集中、效率很高,但是分配的內存容量有限。
描述:
內存管理由系統控制,存儲的為非靜態的局部變量,例如:函數參數,在函數中生命的對象的指針等。當系統的棧區大小不夠分配時, 系統會提示棧溢出。
堆區:堆區亦稱動態內存分配。程序在運行的時候用malloc或alloc申請任意大小的內存,程序員自己負責在適當的時候用free或delete釋放內存。動態內存的生存期可以由我們決定,如果我們不釋放內存,程序將在最后才釋放掉動態內存(iOS5之前,需要我們手動管理內存。iOS5后,系統自動管理內存)。但是良好的編程習慣是:如果動態內存不在使用,需要將其釋放掉,否則,我們認為發生了內存泄漏現象。
描述:
內存管理由程序控制,存儲的為malloc , new ,alloc出來的對象。
如果程序沒有控制釋放,那么在程序結束時,由系統釋放。但在程序運行過程中,會出現內存泄露、內存溢出問題。
分配方式 類似于鏈表。
代碼區:存放函數體的二進制代碼
描述:
存放函數體的二進制代碼。
運行程序就是執行代碼,代碼要執行就要加載進內存。
文字常量區:常量字符串就是放在這里的。程序結束后由系統釋放
描述:
在程序中使用的常量存儲在此區域。程序結束后,由系統釋放。在程序中使用的常量,都會到文字常量區獲取。
總結
以上是生活随笔為你收集整理的static在内存层面的作用_static的作用和内存划分?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cmd52命令发送 mmc_Linux
- 下一篇: php 安装rabbitmq拓展_安装