儲存空間的分配(UNIX環境高階程式設計筆記)

2021-09-19 03:29:35 字數 1060 閱讀 2532

(1)malloc,分配指定位元組的儲存區。此儲存區中的初值不確定。

(2)calloc,為指定數量指定長度的物件分配儲存空間。該空間的每一bit都初始化為0。

(3)realloc,增加或減少以前分配區的長度。當長度增加後,可能需要將以前分配區的內容移動到另乙個足夠大的區域,以便在尾端提供增加的儲存區,而新增區域內的初始值則不確定。

#include

void *malloc(size_t size);

void *calloc(size_t nobj, size_t size);

void *realloc(void *ptr, size_t newsize);

3個函式的返回值:若成功,返回非空指標;若出錯,返回null

void free(void *ptr);

這3個alloc函式都返回通用指標void *,所以如果在程序中包含了#include ,那麼我們將這些函式的返回的指標賦予乙個不同型別的指標時,就不需要進行顯式的進行強制型別轉換。

函式free釋放ptr指向的儲存空間。被釋放的空間通常被送入可用儲存區池,以後可在呼叫上述3個alloc函式時再分配。

realloc函式可以增、減以前分配的儲存區的長度。最後乙個引數是新儲存區的新長度,不是新舊儲存區之間的差。若ptr是乙個空指標,則realloc的功能和malloc相同。

這些分配例程通常通過sbrk系統呼叫實現。該系統呼叫擴充或者縮小程序的堆。

大多數實現所分配的儲存空間比所要求的要大一點,額外的空間用來記錄管理資訊——分配塊的長度、指向下一分配塊的指標等。

在動態分配的緩衝區之前或之後進行寫操作,破壞的可能不僅僅是該區的管理記錄資訊。

其他可能造成的致命性錯誤是:釋放乙個已經釋放的塊;呼叫free時所用的指標不是alloc函式的返回值等。如果乙個程序呼叫malloc函式,但是卻忘記free,則此程序占用的儲存空間就會連續增加,這被稱為洩露(leakage)。如果不呼叫free函式釋放不再使用的空間,那麼程序位址空間的長度就會慢慢增加,甚至不再有位址空間。此時,由於過度的換頁開銷,會造成效能下降。

與很多可代替malloc和free的函式。某些系統已經提供代替儲存空間分配函式的庫。

共享儲存(UNIX環境高階程式設計筆記)

共享儲存允許兩個或者多個程序共享乙個給定的儲存區。因為資料不需要在客戶程序和伺服器程序之間進行複製,所以這是最快的一種ipc。通常,使用訊號量同步共享儲存訪問。呼叫的第乙個函式通常是shmget,它獲得乙個共享儲存標識。include int shmget key t key,size t size...

unix環境高階程式設計

unix 日曆時間 自1970 年1 月1 日00 00 00 以來的國際標準時間 utc 程序時間 cpu 時間 時鐘時間 程序執行時間的總量。使用者cpu 時間 執行使用者指令時間量。系統cpu 時間 執行核心所經歷時間。命令 time 第三章至第七章 原子操作 任何乙個要求多於1 個函式呼叫的...

Unix環境高階I O(Select)

允許程序高數核心等待多種 i o事件中的任何一種出現,並且進當這些時間中的乙個或多個出現時,或這指定的時間已過去時才喚醒呼叫程序。因此函式有如下兩種作用 1.等待多個 i o 2.設定 i o操作超時 include struct timeval 2.1 include 多路i o int sele...