固定記憶體分割槽(c語言實現)

2021-10-10 15:33:16 字數 2004 閱讀 3153

記憶體是計算機的重要組成部分,它主要配合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語言程式就屬於應用程式,程式 本身存放在程式區,而程式執行時所需變數的儲存空間則在應用程式資料區分配,該資料區又分為靜態資料區 堆疊區和堆區三種,程式執行時...