當前位置:首頁 » 服務存儲 » static關鍵字存儲的數據放在哪裡
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

static關鍵字存儲的數據放在哪裡

發布時間: 2022-07-16 00:44:15

❶ java static變數存儲在什麼地方呢,別說什麼靜態存儲池的,我需要實際和具體的回答,是內存還是緩存

java運行時所有對象都只在JVM包裝的內存中,JVM不是跨平台的,它由系統軟體載入到內存中,很顯然,java的對象全都在內存中。
不管是靜態的不靜態的都一樣,只不過JVM自己做了內存管理,將靜態的數據存放的地區更加共用一點,非靜態的對象只在一個地方存一個殼子(類,如果類已經載入了的,沒有載入的類連殼子都木有),需要創建對象的時候才繼續向操作系統申請內存資源。

java的緩存機制,通常是指『應用性緩存』,就是在實際應用的時候,用程序實現類似cache的功能的模式,如:文件流讀寫就是在直接跟硬碟交互的內存區域加一個限制讓數據按照一定的規律進行讀寫這樣可以實時檢查通道是否異常,根據狀況調節通道大小,這樣做在大文件的持久化過程中是很有用的,但是小文件非緩存讀寫更有優勢,因為它發生通道阻塞的可能性相當小了。

❷ 靜態static變數在不同的實例中地址是否一樣,存儲在什麼區域

static變數存儲在程序的靜態數據區中;不同實例中,static變數的地址不會變。

❸ C/C++中局部變數數組加上static關鍵字後存放於棧空間還是堆空間

在局部變數前,加上關鍵字static,該變數就被定義成為一個靜態局部變數。
我們先舉一個靜態局部變數的例子,如下:

復制代碼代碼如下:

#include<iostream.h>
voidfn();
voidmain()
{
fn();
fn();
fn();
}

voidfn()
{
staticn=10;
cout<<n<<endl;
n++;
}


通常,在函數體內定義了一個變數,每當程序運行到該語句時都會給該局部變數分配棧內存。但隨著程序退出函數體,系統就會收回棧內存,局部變數也相應失效。
但有時候我們需要在兩次調用之間對變數的值進行保存。通常的想法是定義一個全局變數來實現。但這樣一來,變數已經不再屬於函數本身了,不再僅受函數的控制,給程序的維護帶來不便。
靜態局部變數正好可以解決這個問題。靜態局部變數保存在全局數據區,而不是保存在棧中,每次的值保持到下一次調用,直到下次賦新值。
靜態局部變數有以下特點:
該變數在全局數據區分配內存;
靜態局部變數在程序執行到該對象的聲明處時被首次初始化,即以後的函數調用不再進行初始化;
靜態局部變數一般在聲明處初始化,如果沒有顯式初始化,會被程序自動初始化為0;
它始終駐留在全局數據區,直到程序運行結束。但其作用域為局部作用域,當定義它的函數或語句塊結束時,其作用域隨之結束;

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

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

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

❺ static的變數是放在哪裡呢

而初始值非零則放在數據節中。 數據節和BSS節都屬於數據段。順便說說對象的存儲,可分為三類:靜態存儲(static storage);自動存儲(automatic storage);動態分配存儲(allocated or dynamic storage)。 對於自動存儲則對應的是棧(stack),動態分配存儲對應的是堆(heap);靜態存儲可分為.bss/.data/.rodata等數據段(section)。在程序執行中把初始值為零或者是未設初始值的變數放在.bss段中。對於以下的這段內容。是通過readelf來查看的。

❻ static關鍵字的作用

static關鍵字主要有兩種作用:

第一,為特定數據類型或對象分配單一的存貯空間,而與創建對象的個數無關。第二,希望某個方法或屬性與類而不是對象關聯在一起,也就是說,
在不創建對象的情況下就可以通過類來直接調用方法或使用類的屬性。具體而言,static在java中主要有四種使用情況:成員變數、成員方法、代碼塊及內部類。
(1)static成員變數

雖然java語言中沒有全局的概念,但可以通過static關鍵字來達到全局的效果。java類提供了兩種類型的變數:用static關鍵字修飾的靜態變數和沒有static關鍵字修飾的實例變數。靜態變數
屬於類,在內存中只有一個副本(所有實例都指向同一個內存地址)。只要靜態變數所在的類被載入,這個靜態類就會被分配空間,因此就可以被使用。對靜態變數的引用有兩種方式,分別為「類.靜態變數」和「對象.靜態變數」。

實例變數屬於對象,只有對象被創建後,實例變數才會被分配空間,才能被使用,他在內存中存在多個副本,只能用「對象.靜態變數」的方式來引用。

靜態變數只有一個,被類所擁有,所有的對象都共享這個靜態變數,而實例對象與具體對象有關。

(2) static成員方法
與變數類似,java類同時也提供了static方法與非static方法。static方法是類的方法,不需要創建對象就可以被使用,而非static方法是對象的方法,只有對象被創建出來後才可以被使用。

static 方法中不能使用this和super關鍵字,不能調用非static方法,只能訪問所屬類的靜態成員變數和成員方法,因為當static方法被調用的時候,這個類的對象可能還沒有被創建,即使已經被創建,
也無法確定調用哪個對象的方法。同理static方法也不能訪問非static類型的變數。

static的一個很重要的的用途的是實現單例模式。單例模式的特點是該類只能有一個實例,為了實現這功能,必須隱藏類的構造方法,即把構造方法聲明為private,並提供一個創建對象的方法。由於構造方法被聲明為private,外界無法直接創建這個類型對象,只能通過該類提供的方法來獲取類的對象

❼ static變數存儲在哪裡

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

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

❽ static 函數不是放在棧中的嗎

靜態函數會存儲在全局數據區,類似匯編語言中的.data段

局部變數在進程棧里,每個函數調用完成都有堆棧平衡操作,局部變數在此時釋放

函數是執行的指令代碼,在代碼段。
代碼段、數據段、堆棧段,是一個進程地址空間的分劃。

怎麼他們說成函數也存在數據區??函數應該是代碼呀,當然是在代碼段了。
《C專家編程》作者說過這個問題,就是static這個關鍵字是安排的不和理的,是C語言的多做之過
static對於變數來說,是說地址保存在全局數據區,函數退出變數仍然保存。
static對於函數來說,是指此函數僅對文件可見,
就是說在其他文件裡面不能使用這個文件。是屬於訪問控制。

❾ java里的靜態成員變數是放在了堆內存還是棧內

這個要看對象是否為逃逸對象,如果為非逃逸對象,會根據標量替換來把對象分解成若干個被這個方法使用的成員變數所代替,這些代替的成員變數在棧幀或寄存器上分配空間