關鍵區別–靜態內存分配與動態內存分配
在編程中,有必要存儲計算數據。這些數據存儲在存儲器中。在計算機程序設計中用來存儲數據的存儲器被稱為變量。變量具有特定的數據類型。因此,分配內存來運行程序。內存可以通過兩種方式分配。它們是靜態內存分配和動態內存分配。內存分配一旦改變,就不能改變內存分配。內存不可重用。但是在動態內存分配中,一旦分配了內存,它就可以更改。靜態內存分配和動態內存分配的關鍵區別在於,在靜態內存分配中,一旦分配了內存,內存大小是固定的;而在動態內存分配中,一旦分配了內存,內存大小就可以更改。
目錄
1. 概述和主要區別
2. 什麼是靜態內存分配
3. 什麼是動態內存分配
4. 靜態和動態內存分配的相似性
5. 並排比較-靜態和動態內存分配的表格形式
6. 摘要
什麼是靜態內存分配(static memory allocation)?
在靜態內存分配中,分配的內存是固定的。一旦分配了內存,就不能更改它。記憶不能增加或減少。例如,在C語言中,如果程序員寫intx,這意味著變量可以存儲一個整數值。字節數取決於計算機。也可以有數組。E、 intx[5];這個x是一個數組,可以存儲同一類型的數據序列。它可以存儲五個整數元素。它不能存儲超過五個元素。在Java中,數組可以創建為,intarr[]=new int[5];數組“arr”可以存儲5個整數值,但不能存儲更多的整數值。
在靜態內存分配中,一旦變量被分配,它們將保持永久性。初始分配後,程序員無法調整內存大小。如果程序員分配了一個可以存儲10個元素的數組,則不可能存儲超過指定數量的值。如果程序員最初分配了一個可以容納10個元素的數組,但只需要5個元素,那麼內存就浪費了。內存不再需要,但也不可能重用內存。靜態內存分配是固定的,但實現簡單易行,而且速度也很快。
什麼是動態內存分配(dynamic memory allocation)?
有時需要改變內存的大小。所以內存可以動態分配。根據數據元素的**和刪除,內存可以增長或收縮。這就是所謂的動態內存分配。
在C語言stdlib.h頭文件中,有四個函數用於動態內存分配。它們是calloc、malloc、realloc和free。函數malloc()分配所需大小的字節,並返回一個空指針,指向所分配內存的第一個字節。函數calloc()分配所需大小的字節並將其初始化為零。然後返回指向內存的空指針。free()函數用於重新分配已分配的內存。realloc和函數可以修改以前分配的內存。在使用calloc或malloc分配內存之後,內存大小是固定的,但是可以使用realloc函數增加或減少它們。在Java中,集合可用於動態內存分配。
動態內存分配的主要優點是節省內存。程序員可以根據需要分配內存或釋放內存。內存可以在執行期間重新分配,並且可以在不需要時釋放內存。動態內存分配也比靜態內存分配有效。一個缺點是實現動態內存分配很複雜。
靜止的(static)和動態內存分配(dynamic memory allocation)的共同點
- 兩者都是內存分配機制。
- 兩者都應該由程序員手動實現。
靜止的(static)和動態內存分配(dynamic memory allocation)的區別
靜態與動態內存分配 | |
靜態內存分配是一種分配內存的方法,一旦內存被分配,它就是固定的。 | 動態內存分配是一種分配內存的方法,一旦分配了內存,它就可以更改。 |
修改 | |
在靜態內存分配中,初始分配後不可能調整大小。 | 在動態內存分配中,內存可以相應地最小化或最大化。 |
實施 | |
靜態內存分配很容易實現。 | 動態內存分配的實現很複雜。 |
速度 | |
在靜態內存中,分配執行比動態內存分配快。 | 內存分配比動態內存分配慢。 |
內存利用率 | |
在靜態內存分配中,不能重用未使用的內存。 | 動態內存分配允許重用內存。程序員可以在需要時分配更多的內存。必要時他可以釋放記憶。 |
總結 - 靜止的(static) vs. 動態內存分配(dynamic memory allocation)
在程序設計中,靜態內存分配和動態內存分配是兩種內存分配機制。靜態內存分配和動態內存分配的區別在於,在靜態內存分配中,一旦分配內存,內存大小是固定的;而在動態內存分配中,一旦分配了內存,內存大小就可以更改。程序員可以根據應用程序決定內存是靜態的還是動態的。
下載靜態和動態內存分配的pdf文件
你可以下載這篇文章的PDF版本,並按照引文說明離線使用。請在這裡下載PDF版本:靜態和動態內存分配的區別