靜態變數,靜態區域性變數的生存週期
首先要理解生存週期與作用域的區別:
生存週期: 變數從定義到銷燬的時間範圍。存放在全域性資料區的變數的生存週期存在於整個程式執行期間,而存放在棧中的資料則隨著函式等的作用域結束導致出棧而銷燬,除了靜態變數之外的區域性變數都存放於棧中。
作用域: 變數的可見程式碼域(塊作用域,函式作用域,類作用域,程式全域性作用域)。
static變數是指靜態的變數,不管是在全域性還是區域性宣告的static變數都存放於程式的全域性變數區域,所以它的生命週期是從程式開始到程式結束。但是static變數的作用域並不等同於它的生存週期,它的作用域決定於它被定義的位置。可以認為static變數的作用域<=生存週期。
舉一個區域性宣告的例子。在函式test中宣告靜態變數i:
void test()
{
int m=3;
static int i=5;
}
區域性變數m存放在棧中,當test函式結束,m將被銷燬;靜態變數i不存放在棧中,而是存放於程式的全域性變數區域,因此隨著函式test的結束,它並不隨著出棧操作而被銷燬,它的生存週期存在於程式的整個執行期;然而m和i的作用域都僅存在於test函式中它們的定義之後,即test呼叫結束之後,m和i就不再可用,但是i仍存在於記憶體之中。
相關推薦
靜態變數,靜態區域性變數的生存週期
首先要理解生存週期與作用域的區別: 生存週期: 變數從定義到銷燬的時間範圍。存放在全域性資料區的變數的生存週期存在於整個程式執行期間,而存放在棧中的資料則隨著函式等的作用域結束導致出棧而銷燬,除了靜態變數之外的區域性變數都存放於棧中。 作用域: 變數的可見程式碼域(塊
C語言那年踩過的坑--區域性變數,靜態變數,全域性變數在記憶體中存放的位置
先看幾個概念: 1、bss是英文block started by symbol的簡稱,通常是指用來存放程式中未初始化的全域性變數的一塊記憶體區域,在程式載入時由核心清0。bss段屬於靜態記憶體分配。它的初始值也是由使用者自己定義的連線定位檔案所確定,使用者應該將它定義在可讀寫的ram區內,源程式中使用m
舉例詳解java例項變數,靜態變數,區域性變數
public class Variable { public int m,n;//對子類可見的例項變數 private double k;//只對本類可見的例項變數,一般情況下,設為私有,通過使用訪問修飾符來被子類使用。 public static String P;//靜態變數(
靜態函式,靜態(區域性)變數,普通函式,普通變數,普通全域性變數
static 靜態變數,普通變數和全域性變數,靜態區域性變數 靜態變數:程式級別的變數,生命週期是整個程式,在程式結束後釋放 普通變數:作用域為當前函式,當前會話,或者當前檔案,離開後自動釋放 全域性變數:作用於整個工程,自動分配 靜態區域性變數:;靜態區域性變數
C++程式執行時記憶體佈局之----------區域性變數,全域性變數,靜態變數,函式程式碼,new出來的變數
宣告兩點: (1)開發測試環境為VS2010+WindowsXP32位; (2)記憶體佈局指的是虛擬記憶體地址,不是實體地址。 1.測試程式碼 #include <iostream> using namespace std; int g_int_a; i
C和C++中全域性變數,區域性變數,靜態變數和常量
最近在Leecode上見到很多關於靜態變數,常量,全域性變數等相關的題,於是結合一些Leecode例題和《C++程式設計思想》整理了這篇部落格,詳細解釋了下它們的區別和用法。 1. 全域性變數 全域性變數是在所有函式體的外部定義的,程式的所有部分(其他檔案的程式碼
靜態(static)全域性變數與全域性變數,靜態區域性變數與區域性變數,內部(static)函式與普通函式
(1)static全域性變數和普通全域性變數的區別 主要是作用域和使用範圍的區別 static/靜態全域性變數作用域有限,侷限在一個原始檔內(定義它的原始檔),不能被同一源程式的其他原始檔使用,避免引起錯誤。(因而同名靜態全域性變數可以被定義在
c語言中的變數(區域性變數,外部變數,靜態變數,暫存器變數) .
c語言中變數分為四類,分別是 1.auto 自動變數 2.static 靜態存貯分配變數(又分為內部靜態和外部靜態) 3.extern 外部變數/全程變數(用於外部變數說明) 4.register 暫存器變數(分配在硬體暫存器中) 四
C/C++中的靜態全域性變數,靜態區域性變數,全域性變數,區域性變數的區別
static有兩種用法:面向過程程式設計中的static和麵向物件程式設計中的static。前者應用於普通變數和函式,不涉及類;後者主要說明static在類中的作用。 面向過程設計中的static 全域性變數、區域性變數、靜態全域性變數、靜態區域性變數的區別 C++
java中的遞迴——成員變數,區域性變數,靜態變數
在java的遞迴過程中,涉及到三種變數,例項成員變數,區域性變數,靜態變數。成員變數和區域性變數一樣,都會隨著函式遞迴呼叫而進棧,而靜態變數就相當於c語言中的全域性變數,函式在遞迴過程中呼叫的全域性變數始終是同一個。 package com.algorithm.tree;
C|C++中的靜態全域性變數,靜態區域性變數,全域性變數,區域性變數的區別
static有兩種用法:面向過程程式設計中的static和麵向物件程式設計中的static。前者應用於普通變數和函式,不涉及類;後者主要說明static在類中的作用。 一、面向過程設計中的static 全域性變數、區域性變數、靜態全域性變數、靜態區域性變數的區別 C++變數根據定義的位置的不同的生命週期,具有
全域性變數,區域性變數,靜態變數和例項變數的區別
全域性變數是一個執行時刻實體,他在程式的整個執行過程都存在。全域性變數佔用的儲存時刻的使命週期從程式的開始到結束,全域性變數初始化時或者未初始化時,在程式映像中有不同的分割槽,已初始化的n全域性變數是可執行的一部分。未初始化的全域性變數是不可初始化的一部分,只
java中靜態變數,靜態程式碼塊,靜態方法,例項變數,匿名程式碼塊的載入順序
1. java中靜態變數,靜態程式碼塊,靜態方法,例項變數,匿名程式碼塊 在Java中,使用{}括起來的程式碼稱為程式碼塊,程式碼塊可以分為以下四種: (1)普通程式碼塊:就是類中方法的方法體 public void xxx(){ //code }
Java_12_變數(variable)_區域性變數_例項變數_靜態變數_常量_命名規範
變數(variable) 我們通過變數來操縱儲存空間中的資料,變數就是指這個儲存空間,空間位置是確定的,但是裡面放置什麼值不確定。 Java是一種強型別語言,每個變數都必須宣告其型別。 Java變數是程式中最基本的儲存單元,其要素包括變數名,變數型別和作用域。 變數在使用前必須對其宣告,
靜態變數、成員變數(例項變數)、區域性變數
靜態變數靜態變數也稱作類變數,是在類之中,方法之外,以static關鍵字申明的變數,其獨立在物件之外,有許多物件共享的變數。靜態變數在物件產生之前產生,並長駐於記憶體,其在JVM關閉時銷燬。成員變數成員變數也稱作例項變數、屬性, 申明在類之中,方法之外的變數,隨物件銷燬而銷燬。區域性變數在方法
成員變數(例項變數)&區域性變數&靜態變數(類變數)的區別
成員變數(例項變數)&區域性變數&靜態變數(類變數)的區別 成員變數(例項變數)&區域性變數區別: (1)作用域 成員變數:針對整個類有效。 區域性變數:只在某個範圍內有效。(一般指的就是方法,語句體內)(2)儲存位置 成員變數:隨著物件的建立而存在,隨著物件的消失而
java中靜態變數,靜態方法,靜態程式碼塊,構造程式碼塊,構造方法...執行順序
public class TestExeOrder { public TestExeOrder(){ System.out.println("類的構造方法執行了..."); } { System.out.println("構造程式碼塊執行了
區別JS中類的靜態方法,靜態變數,例項方法,例項變數
1.類的靜態方法 先來段程式碼之後分析 // JS類靜態函式 function BaseClass() { } // 類新增add函式 BaseClass.add = function()
Java中靜態成員變數,靜態程式碼塊,靜態內部類何時被初始化?
關於這個問題,本文不扯理論,直接上程式碼,通過結果來驗證結論,廢話少說,測試程式碼如下: public class StaticTest { public static StaticMember staticMember = new Static
java靜態變數,靜態程式碼塊,普通程式碼塊,建構函式載入順序
前言: java成員變數和構造方法等載入順序是一個很基礎又很容易搞混的東西,今天寫下來算是更明確一些 正文: 廢話不多說上程式碼 public class Father { public Father(){ System.out.print