㈠ 靜態存儲和動態存儲的區別
1. 靜態內存
靜態內存是指在程序開始運行時由編譯器分配的內存,它的分配是在程序開始編譯時完成的,不佔用CPU資源。
程序中的各種變數,在編譯時系統已經為其分配了所需的內存空間,當該變數在作用域內使用完畢時,系統會
自動釋放所佔用的內存空間。
變數的分配與釋放,都無須程序員自行考慮。
基本類型,數組
2. 動態內存
用戶無法確定空間大小,或者空間太大,棧上無法分配時,會採用動態內存分配。
處理器不工作,電腦什麼都做不了。
處理器的工作就是處理指令(多條指令就構成一個程序)。
處理器從內存中取指令集(程序)。
問題是如果斷電的話,內存中的指令就會丟失。因而內存歸類為「易失性」介質。
所以我們要把程序、數據存儲在不易失性的介質中,比如硬碟和光碟。
㈡ 順序表的靜態存儲與動態存儲有什麼區別
char
sz[5];就是靜態的
char
*psz
=
new
char[5]就是動態的
靜態的5一定要試常數不能使變數,而動態的則可以是隨便的,可以是表達式也可以是常量或變數
因為靜態的是編譯完就分配好的,而動態的是在運行過程中才確定大小的;
比如我在程序中寫char
sz[5];那麼運行過程中就無法改變這塊內存,分配大小從開始到運行結束都始終是不變的
而如果我在程序中寫
int
i;
cin
>>
i;
char
*psz
=
new
char[i];
程序開始是沒有分配大小的,因為這個值是未知的,等到我輸入數值,他才知道該分配了多大,而你不能這樣寫
int
i;
cin
>>
i;
char
sz[i];
這樣寫是錯誤的,他會警告中括弧裡面的數字不是常數
而像這樣的臨時分配的內存必須要釋放掉(c++中用delete而c中則是用free())
㈢ 在C語言中,什麼是動態存儲,什麼是靜態存儲
動態存儲是auto關鍵字,例如我們定義的int a; 默認就是動態存儲,具體應該是 auto int a;一般是用於函數參數,局部變數,超出作用域范圍會失效,變數產生在動態存儲區
靜態存儲時static關鍵字,例如,我們定義一個 static int a; 就是存儲在靜態存儲區,相當於一個全局變數
一樓的理解出現了問題
㈣ 什麼是動態存儲什麼時候用
存儲器分為內存和外存
內存又分為靜態存儲和動態存儲
動態存儲就是指內存條(這只是我的個人意見)
當你的電腦運行時,硬碟中的信息就會傳到內存條中,然後再傳給CPU處理。也就是說當你的電腦打開後,你的動態存儲器已經開始在用了。
舉個例子:
硬碟就相當於冰箱,內存條就相當於切菜用的案板,CPU就相當於菜刀。要完成某向程序就如同:把材料從冰箱里拿出來,再放到案板上,用刀完成。你所說的那個動態存儲就是案板,是臨時存放你當前打開的程序的。
㈤ 什麼是靜態存儲區和動態存儲區啊
1. 全局變數和靜態數據放在靜態存儲區,生命周期為從申請到程序退出。因此局部變數若定義為static,則存儲在靜態存儲區,否則存儲在函數的棧內,生命周期為本函數內。
2 動態存儲放自動變數和局部變數
㈥ 動態存儲區與靜態存儲區的區別
我理解吧,這個動態跟靜態主要是針對指針而言的。而且對於單個變數來說,動態跟靜態的概念體現的不是特別清楚,下面主要介紹數組吧。
如果你聲明一個數組int a[100],那麼這個數組的大小就是100,在內存中的位置也固定,如果後來發現數組不夠大,你就只能重新定義一個更大的數組,而不能直接改變數組a的大小。這就是靜態存儲。
如果你聲明一個指針int *p,一開始你想開辟一個100的數組,就寫p = new int[100],後面發現100不夠大,你可以先delete []p,把原來的空間釋放掉,然後讓p = new int[200],p就會指向一個大小為200的數組,這個數組的大小以及在內存中的位置可以根據需要不斷變化。這就是動態存儲。
㈦ 什麼是動態存儲結構,簡明明了說明一下,。謝謝。
鏈表就是動態存儲結構,不僅在尾部可以增加數據,在中間位置也可以任意增加和刪除!
線性表的鏈式存儲結構,簡稱鏈表,是用一組任意的存儲單元(這組存儲單元可以是連續的,也可以是不連續的)存儲線性表中的數據元素。
因此,為了表示每個數據元素ai與其直接後繼數據元素ai+1之間的邏輯關系,對數據元素ai來說,除了存儲其本身的信息之外,還需存儲一個指示其直接後繼的信息(即直接後繼的存儲位置)。
由分別表示a1,a2,…,an,
的n
個結點依次相鏈構成的鏈表,稱為線性表的鏈式存儲表示,由於此類鏈表的每個結點中只包含一個指針域,故稱為單鏈表或線性鏈表。
㈧ 內部動態存儲空間是什麼意思
運存相當於內存,容量與速度成正比
nand是用來存放手機操作系統的,不被用戶使用
㈨ 如何實現動態存儲
數組的大小必須事先直接或間接的給定,否則編譯時就會出錯!
你可以用數組指針和結構體指針實現動態分配內存,例如:
int size;
size=strlen(arr);//假設arr是一個長度暫時未知的字元串,也可以用sizeof計算
然後就可以用malloc函數給指針分配內存。
你的意思是接收一個數據,你先測它的大小然後再為其分配相同大小的空間存儲 以節約內存?
這個實在不好實現,因為這就像是「捕風捉影」!接收來的數據也得先儲存起來才能測它的大小啊!