當前位置:首頁 » 存儲配置 » static存儲位置

static存儲位置

發布時間: 2022-10-20 17:01:43

Ⅰ 靜態存儲

3個a不會沖突。

這里涉及幾個方面的知識:
1. 全局變數和靜態數據放在靜態存儲區,生命周期為從申請到程序退出。因此局部變數若定義為static,則存儲在靜態存儲區,否則存儲在函數的棧內,生命周期為本函數內。
2. 全局變數和局部變數的作用域,全局變數為從申請到整個程序結束,局部變數為從申請到本{}范圍內。
3. 局部變數對全局變數的屏蔽。若在本函數內定義的變數與全局變數同名,則將全局變數屏蔽,使用時為內部定義的局部變數。
4. 定義為static類型的局部變數,再次進入該函數,可以使用保留的結果。

下面的程序可以幫助理解:
#include<stdio.h>

int a = 1;

void fun()
{
static int a =3;
int b = 1;
printf("%d, %d\n", a, b);

a++;
b++;
}

int main()
{
printf("%d\n", a); /* global a */

static int a = 2;

printf("%d\n", a); /* static a in main */

fun(); /* static a in fun */
fun(); /* static a in fun */

return 0;
}

運行結果為:
1 /* 全局變數a */
2 /* 因為定義了main內的局部變數static int a,全局變數a被屏蔽,列印的為main局部變數a */
3, 1 /* 因為定義了fun內的局部變數static int a,全局變數a被屏蔽,列印的為fun內的局部變數a。 b是局部變數,列印為1 */
4, 1 /* 因為static的生命周期為整個程序,再次進入fun是a的值可以被保留,再次調用列印的值編程了3+1=4。b因為是在棧內,函數退出後空間被釋放,再次進入是重新申請的空間,結果仍為新初始化的值1 */

c語言中static定義的變數 存儲在OS內存的什麼區域

windows下,進程虛擬地址4G,0~2G屬於進程私有,
進程私有地址布局是:
兩端各有64k空間,以防指針值為空,
地址從低往高是代碼段、數據段、棧、堆,

static變數在數據段,具體是_DATA段,該段數據都已初始化

Ⅲ Static是什麼意思啊,在C程序裡面

static可應用於應用於內部變數、外部變數和函數。應用於內部變數時,其作用是用來指定變數的存儲類別為靜態變數。應用於外部變數和函數時,其作用是限制變數或函數的作用范圍僅限於外部變數或函數所在的源文件。

1、在整個程序運行的過程中,無論靜態內部變數所在的函數被調用了多少次,靜態內部變數只運行一次初始化,即在程序運行時完成的。

2、在函數的兩次調用期間,靜態內部變數所在存儲單元不被釋放,因而當前次函數調用執行時其值會被保存下來,下次調用時該值依然存在。即靜態內部變數的值在從一次函數調用到下一次函數調用到下一次函數調用到下一次函數調用之間保持不變。

3、 默認情況下,外部變數的作用域是從定義變數的位置到所在源文件的末尾。

一、函數分為內部函數和外部函數

當一個源程序由多個源文件組成時,C語言根據函數能否被其它源文件中的函數調用,將函數分為內部函數和外部函數。

1、內部函數(又稱靜態函數)

如果在一個源文件中定義的函數,只能被本文件中的函數調用,而不能被同一程序其它文件中的函數調用,這種函數稱為內部函數。

定義一個內部函數,只需在函數類型前再加一個「static」關鍵字即可,如下所示:

static 函數類型 函數名(函數參數表){……}

關鍵字「static」,譯成中文就是「靜態的」,所以內部函數又稱靜態函數。但此處「static」的含義不是指存儲方式,而是指對函數的作用域僅局限於本文件。

使用內部函數的好處是:不同的人編寫不同的函數時,不用擔心自己定義的函數,是否會與其它文件中的函數同名,因為同名也沒有關系。

2、外部函數

外部函數的定義:在定義函數時,如果沒有加關鍵字「static」,或冠以關鍵字「extern」,表示此函數是外部函數:

[extern] 函數類型 函數名(函數參數表){……}

調用外部函數時,需要對其進行說明:

[extern] 函數類型 函數名(參數類型表)[,函數名2(參數類型表2)……];

二、C語言是一門面向過程、抽象化的通用程序設計語言,廣泛應用於底層開發。C語言能以簡易的方式編譯、處理低級存儲器。C語言是僅產生少量的機器語言以及不需要任何運行環境支持便能運行的高效率程序設計語言。

盡管C語言提供了許多低級處理的功能,但仍然保持著跨平台的特性,以一個標准規格寫出的C語言程序可在包括一些類似嵌入式處理器以及超級計算機等作業平台的許多計算機平台上進行編譯。

(3)static存儲位置擴展閱讀:

static的作用

在C語言中,static的字面意思很容易把我們導入歧途,其實它的作用有三條。

1、最重要的一條:隱藏。

同時編譯多個文件時,所有未加static前綴的全局變數和函數都具有全局可見性。

加了static,就會對其它源文件隱藏。例如在a和msg的定義前加上static,main.c就看不到它們了。利用這一特性可以在不同的文件中定義同名函數和同名變數,而不必擔心命名沖突。Static可以用作函數和變數的前綴,對於函數來講,static的作用僅限於隱藏,而對於變數,static還有下面兩個作用。

2、static的第二個作用是保持變數內容的持久。存儲在靜態數據區的變數會在程序剛開始運行時就完成初始化,也是唯一的一次初始化。共有兩種變數存儲在靜態存儲區:全局變數和static變數,只不過和全局變數比起來,static可以控制變數的可見范圍,說到底static還是用來隱藏的。

3、static的第三個作用是默認初始化為0。其實全局變數也具備這一屬性,因為全局變數也存儲在靜態數據區。在靜態數據區,內存中所有的位元組默認值都是0x00,某些時候這一特點可以減少程序員的工作量。比如初始化一個稀疏矩陣,我們可以一個一個地把所有元素都置0,然後把不是0的幾個元素賦值。

如果定義成靜態的,就省去了一開始置0的操作。再比如要把一個字元數組當字元串來用,但又覺得每次在字元數組末尾加』』太麻煩。如果把字元串定義成靜態的,就省去了這個麻煩,因為那裡本來就是』』。

最後對static的三條作用做一句話總結。首先static的最主要功能是隱藏,其次因為static變數存放在靜態存儲區,所以它具備持久性和默認值0。

參考資料來源:

網路-static函數

網路-c語言

Ⅳ static變數特點

二、static修飾的變數
1. 全局靜態變數

在全局變數之前加上關鍵字static,全局變數就被定義成為一個全局靜態變數。

1)內存中的位置:靜態存儲區(靜態存儲區在整個程序運行期間都存在)

2)初始化:未經初始化的全局靜態變數會被程序自動初始化為0(自動對象的值是 任意的,除非他被顯示初始化)

3)作用域:全局靜態變數在聲明他的文件之外是不可見的。准確地講從定義之處開始到文件結尾。

定義全局靜態變數的好處:

<1>不會被其他文件所訪問,修改

<2>其他文件中可以使用相同名字的變數,不會發生沖突。

2. 局部靜態變數

在局部變數之前加上關鍵字static,局部變數就被定義成為一個局部靜態變數。

1)內存中的位置:靜態存儲區

2)初始化:未經初始化的局部靜態變數會被程序自動初始化為0(自動對象的值是任意的,除非他被顯示初始化)

3)作用域:作用域仍為局部作用域,當定義它的函數或者語句塊結束的時候,作用域隨之結束。

註:當static用來修飾局部變數的時候,它就改變了局部變數的存儲位置,從原來的棧中存放改為靜態存儲區。但是局部靜態變數在離開作用域之後,並沒有被銷毀,而是仍然駐留在內存當中,直到程序結束,只不過我們不能再對他進行訪問。

Ⅳ 結構體裡面有個static

1、static 靜態關鍵字

靜態數據成員

在類內數據成員的聲明前加上static關鍵字,該數據成員就是類內的靜態數據成員。其特點如下:

  • 靜態數據成員存儲在全局數據區,靜態數據成員在定義時分配存儲空間,所以不能在類聲明中定義

  • 靜態數據成員是類的成員,無論定義了多少個類的對象,靜態數據成員的拷貝只有一個,且對該類的所有對象可見。也就是說任一對象都可以對靜態數據成員進行操作。而對於非靜態數據成員,每個對象都有自己的一份拷貝。

  • 由於上面的原因,靜態數據成員不屬於任何對象,在沒有類的實例時其作用域就可見,在沒有任何對象時,就可以進行操作

  • 和普通數據成員一樣,靜態數據成員也遵從public, protected, private訪問規則

  • 靜態數據成員的初始化格式:<數據類型><類名>::<靜態數據成員名>=<值>

  • 類的靜態數據成員有兩種訪問方式:<類對象名>.<靜態數據成員名> 或 <類類型名>::<靜態數據成員名>

Ⅵ static對象存在哪裡

這個對象的話一般是存在靜態文件裡面,它表示靜態的。

學習,是指通過閱讀、聽講、思考、研究、實踐等途徑獲得知識和技能的過程。學習分為狹義與廣義兩種:

狹義:通過閱讀、聽講、研究、觀察、理解、探索、實驗、實踐等手段獲得知識或技能的過程,是一種使個體可以得到持續變化(知識和技能,方法與過程,情感與價值的改善和升華)的行為方式。例如通過學校教育獲得知識的過程。

廣義:是人在生活過程中,通過獲得經驗而產生的行為或行為潛能的相對持久為方式。

社會上總會出現一種很奇怪的現象,一些人嘴上埋怨著老闆對他不好,工資待遇太低什麼的,卻忽略了自己本身就是懶懶散散,毫無價值。

自古以來,人們就會說著「因果循環」,這話真不假,你種什麼因,就會得到什麼果。這就是不好好學習釀成的後果,那麼學習有什麼重要性呢?

物以類聚人以群分,什麼樣水平的人,就會處在什麼樣的環境中。更會漸漸明白自己是什麼樣的能力。了解自己的能力,交到同水平的朋友,自己個人能力越高,自然朋友質量也越高。

在大多數情況下,學習越好,自身修養也會隨著其提升。同樣都是有錢人,暴發戶擺弄錢財只會讓人覺得俗,而真正有知識的人,氣質就會很不一樣。

高端大氣的公司以及產品是萬萬離不了知識的,只有在知識上不輸給別人,才可以在別的地方不輸別人。

孩子的教育要從小抓起,家長什麼樣孩子很大幾率會變成什麼樣。只有將自己的水平提升,才會教育出更好的孩子。而不是一個目光短淺的人。

因為有文化的父母會給孩子帶去更多的在成長方面的的幫助,而如果孩子有一個有文化的父母,通常會在未來的道路上,生活得更好,更順暢。

學習是非常的重要,學習的好壞最終決定朋友的質量、自身修養和後代教育等方面,所以平時在學習中要努力。

java中 static變數和方法到底是存在內存什麼區域

JVM內存總體一共分為了
4個部分(stack segment、heap segment、code segment、data segment)
當我們在程序中,申明一個局部變數的時候,此變數就存放在了 stack segment(棧)當中;
當new 一個對象的時候,此對象放在了heap segment(堆)當中;
而static 的變數或者字元串常量 則存在在 data segment(數據區)中;
那麼類中方法的話,是存在在 code segment(代碼區)中了。

Ⅷ static變數存儲在哪裡

該變數在全局數據區分配內存;
未經初始化的靜態全局變數會被程序自動初始化為0(自動變數的值是隨機的,除非它被顯式初始化);
靜態全局變數在聲明它的整個文件都是可見的,而在文件之外是不可見的;
靜態變數都在全局數據區分配內存,包括後面將要提到的靜態局部變數。對於一個完整的程序,在內存中的

代碼區,全局數據區,堆區,棧區
一般程序的由new產生的動態數據存放在堆區,函數內部的自動變數存放在棧區。自動變數一般會隨著函數的退出而釋放空間,靜態數據(即使是函數內部的靜態局部變數)也存放在全局數據區。全局數據區的數據並不會因為函數的退出而釋放空間。細心的讀者可能會發現,Example 1中的代碼中將
static int n; //定義靜態全局變數
改為
int n; //定義全局變數
程序照樣正常運行。
的確,定義全局變數就可以實現變數在文件中的共享,但定義靜態全局變數還有以下好處:
靜態全局變數不能被其它文件所用;
其它文件中可以定義相同名字的變數,不會發生沖突;

Ⅸ static關鍵字的作用是什麼

static作用:

1、修飾函數的局部變數:特點:有默認值0,只執行一次,運行一開始就開辟了內存,內存放在全局

2、修飾全局函數和全局變數:特點:只能在本源文件使用

3、修飾類裡面的成員變數:特點:和1差不多,定義多個static y,但只有一個y,不進入類的大小計算,不依賴於類對象的存在而存在(可直接調用,要進行外置聲明)

聲明為static的變數稱為靜態變數或類變數。

可以直接通過類名引用靜態變數,也可以通過實例名來引用靜態變數,但最好採用前者,因為後者容易混淆靜態變數和一般變數。靜態變數是跟類相關聯的,類的所有實例共同擁有一個靜態變數。

聲明為static的方法稱為靜態方法或類方法。靜態方法可以直接調用靜態方法,訪問靜態變數,但是不能直接訪問實例變數和實例方法。靜態方法中不能使用this關鍵字,因為靜態方法不屬於任何一個實例。

以上內容參考:網路-static

熱點內容
19投籃腳本 發布:2025-05-14 23:36:57 瀏覽:511
編譯器怎麼處理c變長數組 發布:2025-05-14 23:31:46 瀏覽:662
存摺每天可以輸錯多少次密碼 發布:2025-05-14 23:22:06 瀏覽:908
安卓手機怎麼找微信隱藏對話 發布:2025-05-14 23:07:47 瀏覽:337
怎麼查看泰拉伺服器ip 發布:2025-05-14 23:03:29 瀏覽:73
c語言學生成績查詢系統 發布:2025-05-14 22:58:30 瀏覽:5
怎麼進別人的伺服器 發布:2025-05-14 22:45:55 瀏覽:773
用編程寫音樂 發布:2025-05-14 22:45:08 瀏覽:782
如何識別電腦的網路配置 發布:2025-05-14 22:38:46 瀏覽:848
pipforpython3 發布:2025-05-14 22:38:34 瀏覽:350