記憶體是計算機的重要組成部分,它主要配合cpu的告訴運轉,提高計算機的執行速度。在計算機內部執行的都是一道道程式,而程式是儲存在外存(硬碟)中的,但外存的讀取速度非常緩慢,如果直接與cpu進行資料傳輸,會大大的降低cpu的效率。這時候能夠提供高速訪問的記憶體就很適合與cpu直接進行資料傳輸,但提供了高速的訪問速度,犧牲的就是它的成本,這時記憶體的儲存空間就相較於外存來說就很小。所以在有限的記憶體空間中,如何將外存中的程式存入到記憶體中,就牽扯到記憶體分配了。
記憶體分配演算法可以分為兩類:連續式分配和非連續式分配
連續式分配就是講乙個要執行的程式完整有序的存入記憶體。連續式分配又可以分為固定分分配區和動態分割槽分配。
非連續式分配就是把要執行的程式按照一定規則進行拆分,顯然這樣更有效率,現在的作業系統通常也都是採用這種方式分配記憶體。
又稱定長分割槽或靜態分割槽模式,是滿足多道程式設計需要的最簡單的儲存管理技術。
基本思想:給進入主存的使用者作業劃分一塊連續儲存區域,把作業裝入該連續儲存區域,若有多個作業裝入主存,則它們可併發執行。
使用大小相等的固定分割槽有兩個難點:程式可能太大而不能放到乙個分割槽中,記憶體的利用率很低。由於被裝入的資料塊小於分割槽大小,從而導致分割槽內部有浪費現象,成為「內部碎片」。對與大小不等的分割槽策略,最簡單的方法就是把每個程序分配到能夠容納它的最小分割槽中。
#include
#include
void
allocate
(int id,
int size)
;//為程序分配分割槽(程序號, 所需記憶體大小)
void
release
(int id)
;// 刪除乙個已分配的程序(程序id)
void
insert()
;//輸入要分配的資訊
void
del();
//選擇釋放的程序
void
run();
//選單
void
start()
;//初始化記憶體分割槽
void
display()
;//遍歷並顯示記憶體分割槽
void
table()
;//顯示 程序-分割槽關係表
// 記錄程序
struct processinfo
;//記憶體分割槽資訊
struct partitioninfo
;struct processinfo process[5]
;//建立程序資訊結構體
struct partitioninfo partition[5]
;//建立記憶體分割槽結構體
int a[5]
[2];
//建立程序-分割槽關係表
void
allocate
(int id,
int size)}}
}}printf
("分配失敗!!! 沒有可用的記憶體分割槽!!!\n");
return;}
void
release
(int id)
}for
(j=i ;j<5-
1;j++)}
}}void
insert()
}printf
("請輸入程序所需的記憶體空間大小:");
scanf
("%d"
,&size)
;allocate
(id,size)
;return;}
void
del(
)void
start()
for(j=
0;j<
5;j++)}
void
dispaly()
}//檢視程序分配表
void
table()
}//選單
void
run()}
}void
main()
C語言實現記憶體池
什麼是記憶體池,這裡簡單介紹一下 不做詳細說明 記憶體池技術是一種用於分配大量大小相同的小物件的技術,通過該技術可以極大加快記憶體分配 釋放過 程。其原理是先申請一大塊記憶體,然後分成若干個大小相等的小塊,用鍊錶的方式將這些小塊鏈在一起,當開發人員需要使用記憶體時 分配 從煉表頭取下一塊返 回給開發...
C語言實現動態分割槽分配
重複度還是很高的,存在簡化的空間。define crt secure no warnings include include include include define len sizeof qu int m 0 typedef struct fenqu qu qu tin null 懸停指標 q...
C語言記憶體分割槽
計算機的記憶體空間主要分為三個區 系統程式區 應用程式區和資料區 其中資料區又分為系統程式資料區和應用程式資料區兩類。大家在學習過程中編制的 c語言程式就屬於應用程式,程式 本身存放在程式區,而程式執行時所需變數的儲存空間則在應用程式資料區分配,該資料區又分為靜態資料區 堆疊區和堆區三種,程式執行時...