我的秋招之路之c++中static的用法
?
c++的內存分布如上圖所示。
對于一個完整的程序,在內存中的分布情況如下圖: ?
1.棧區: 由編譯器自動分配釋放,像局部變量,函數參數,都是在棧區。會隨著作用于退出而釋放空間。
3.堆區:程序員分配并釋放的區域,像malloc(c),new(c++)?
3.全局數據區(靜態區):全局變量和靜態便令的存儲是放在一塊的,初始化的全局變量和靜態變量在一塊區域,未初始化的全局變量和未初始化的靜態變量在相鄰的另一塊區域。程序結束釋放。
4.代碼區
靜態局部變量的特點:
(1)該變量在全局數據區分配內存(局部變量在棧區分配內存);
(2)靜態局部變量在程序執行到該對象的聲明處時被首次初始化,即以后的函數調用不再進行初始化(局部變量每次函數調用都會被初始化);
(3)靜態局部變量一般在聲明處初始化,如果沒有顯式初始化,會被程序自動初始化為0(局部變量不會被初始化);
(4)它始終駐留在全局數據區,直到程序運行結束。但其作用域為局部作用域,也就是不能在函數體外面使用它(局部變量在棧區,在函數結束后立即釋放內存);
.靜態全局變量:
定義在函數體外,用于修飾全局變量,表示該變量只在本文件可見。
作用域:該文件內部, 生存期:整個程序運行期間
可以隔離文件
.靜態函數:
靜態函數跟靜態全局變量的作用類似,即靜態函數不能被其它文件所用。
其它文件中的可以定義相同的名字的函數,不會發生沖突
作用域:該文件內部, 生存期:整個程序運行期間
靜態成員函數
1.靜態成員之間可以相互訪問,包括靜態成員函數訪問靜態數據成員和訪問靜態成員函數;
2.非靜態成員函數可以任意地訪問靜態成員函數和靜態數據成員;
3.靜態成員函數不能訪問非靜態成員函數和非靜態數據成員;
4.調用靜態成員函數,可以用成員訪問操作符(.)和(->)為一個類的對象或指向類對象的指針調用靜態成員函數,也可以用類名::函數名調用(因為他本來就是屬于類的,用類名調用很正常)
參考資料:
原文鏈接:https://blog.csdn.net/chenyijun/article/details/81938287
總結
以上是生活随笔為你收集整理的我的秋招之路之c++中static的用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: xgboost、随机森林和逻辑回归的优缺
- 下一篇: c++工程师面试常见问题之c++中四种c