當前位置:首頁 » 服務存儲 » 靜態存儲區域圖解
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

靜態存儲區域圖解

發布時間: 2022-03-07 11:16:03

『壹』 靜態局部變數存儲存儲在哪個區

靜態區,全局變數和靜態變數的存儲是放在一塊的,初始化的全局變數和靜態變數在一塊區域,
未初始化的全局變數和未初始化的靜態變數在相鄰的另一塊區域。

『貳』 動態存儲區與靜態存儲區的區別

我理解吧,這個動態跟靜態主要是針對指針而言的。而且對於單個變數來說,動態跟靜態的概念體現的不是特別清楚,下面主要介紹數組吧。
如果你聲明一個數組int a[100],那麼這個數組的大小就是100,在內存中的位置也固定,如果後來發現數組不夠大,你就只能重新定義一個更大的數組,而不能直接改變數組a的大小。這就是靜態存儲。
如果你聲明一個指針int *p,一開始你想開辟一個100的數組,就寫p = new int[100],後面發現100不夠大,你可以先delete []p,把原來的空間釋放掉,然後讓p = new int[200],p就會指向一個大小為200的數組,這個數組的大小以及在內存中的位置可以根據需要不斷變化。這就是動態存儲。

『叄』 什麼是靜態存儲區和動態存儲區啊

1. 全局變數和靜態數據放在靜態存儲區,生命周期為從申請到程序退出。因此局部變數若定義為static,則存儲在靜態存儲區,否則存儲在函數的棧內,生命周期為本函數內。
2 動態存儲放自動變數和局部變數

『肆』 靜態存儲區和常量存儲區有什麼區別

一、靜態存儲區和常量存儲區的區別:
1、靜態存儲區,全局變數和靜態變數被分配到同一塊內存中;常量存儲區,這是一塊比較特殊的存儲區,他們裡面存放的是常量,是不允許修改的。
2、靜態存儲是main函數運行前分配內存並初始化;常量存儲是固化在執行文件上的數據。棧的方向和平台有關,一般來說,windows由高地址向低地址增長,linux相反,但linux演變出來的操作系統不排除有特殊情況。
3、常量存儲區裡面的數據是放在代碼段里的,不佔內存。靜態存儲區是在內存空間中的,在其所屬的類(或文件)中是全局的
二、靜態存儲區和常量存儲區介紹
1、靜態存儲區:所有的靜態對象,全局對象都於靜態存儲區分配,全局變數和靜態變數被分配到同一塊內存中,在以前的 C 語言中,全局變數又分為初始化的和未初始化的(初始化的全局變數和靜態變數在一塊區域,未初始化的全局變數與靜態變數在相鄰的另一塊區域,同時未被初始化的對象存儲區可以通過 void* 來訪問和操縱,程序結束後由系統自行釋放),在 C++ 裡面沒有這個區分了,他們共同佔用同一塊內存區。
2、常量存儲區:這是一塊比較特殊的存儲區,他們裡面存放的是常量,不允許修改
三、注意事項:常量字元串都存放在靜態存儲區,返回的是常量字元串的首地址.

『伍』 【C語言】動態存儲區 和 靜態存儲區 的基本問題。萬分感謝!!

malloc申請的空間在 動態儲存區中的堆區。
動態儲存區分為棧區和堆區。
又不懂的可以繼續追問~

『陸』 靜態存儲區

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 */

『柒』 簡述動態和靜態存儲區中數據的初始化有什麼不同

從變數的生存期分,有動態存儲和靜態存儲兩種,動態存儲即在調用函數時臨時分配單元,靜態存儲則是程序整個運行時間內都存在。

動態存儲

形式參數(本函數內有效)

auto自動變數(本函數內有效)

register寄存器變數(本函數有效)

靜態存儲

靜態局部變數(本函數內有效)

靜態外部變數(本文件中有效)

『捌』 什麼 是靜態內存區

從C程序運行的角度看,內存幾大部分:靜態存儲區、堆區和棧區。靜態存儲區:內存在程序編譯的時候就已經分配好,這塊內存在程序的整個運行期間都存在。它主要存放靜態數據、全局數據和常量。

『玖』 靜態存儲和動態存儲的區別

1. 靜態內存

靜態內存是指在程序開始運行時由編譯器分配的內存,它的分配是在程序開始編譯時完成的,不佔用CPU資源。

程序中的各種變數,在編譯時系統已經為其分配了所需的內存空間,當該變數在作用域內使用完畢時,系統會

自動釋放所佔用的內存空間。

變數的分配與釋放,都無須程序員自行考慮。

基本類型,數組

2. 動態內存

用戶無法確定空間大小,或者空間太大,棧上無法分配時,會採用動態內存分配。

  • 處理器不工作,電腦什麼都做不了。

    處理器的工作就是處理指令(多條指令就構成一個程序)。

    處理器從內存中取指令集(程序)。

    問題是如果斷電的話,內存中的指令就會丟失。因而內存歸類為「易失性」介質。

    所以我們要把程序、數據存儲在不易失性的介質中,比如硬碟和光碟。

『拾』 靜態存儲區和動態存儲區一般分別儲存什麼類的東西

c#?