linux C 記憶體流

2021-10-05 05:54:55 字數 918 閱讀 9368

建立記憶體流的函式:

file *fmemopen(void *restrict buf,size_t size, const char *restrict type);

返回值:成功返回流指標,失敗返回null

引數buf是呼叫者提供的緩衝區開始位置,size指定緩衝區大小,type同fopen(r,w,a…);

記憶體流也是使用file指標進行訪問,但其實沒有底層檔案(也就是說,磁碟上並沒有對應的檔案,不同於檔案i/o會在磁碟建立檔案,記憶體流是將資料寫到主存上,關閉時資料消失),因為記憶體流只訪問主存,不訪問磁碟上的檔案,所以把標準i/o流作為引數用於臨時檔案的函式來說,會有很大的效能提公升。

無論何時以追加寫方式開啟記憶體流時,當前檔案位置設為緩衝區中的第乙個null位元組。如果緩衝區中不存在null位元組,則當前位置就設為緩衝區結尾的後乙個位元組。當流並不是以追加寫方式開啟時,當前位置設為緩衝區的開始位置。因為追加寫模式通過第乙個null位元組確定資料的尾端,記憶體流並不適合儲存二進位制資料(二進位制資料在資料尾端之前就可能包含多個null位元組)。任何時候需要增加流緩衝區中資料量以及呼叫fclose, fflush, fseek, fseeko以及fsetpos時都會在當前位置寫入乙個null位元組。

另外兩個建立記憶體流的函式

file *open_memstream(char **bufp,size_t *sizep);

file *open_wmemstream(wchar_t **bufp,size_t *sizep);

open_memstream建立的流面向位元組,open_wmemstream建立的流面向寬位元組,這兩個函式不同於fmemopen在於:

1.建立的流只能寫開啟。

2.不能指定緩衝區,但可以通過bufp和sizep引數訪問緩衝區位址和大小。

3.關閉流後需要自行釋放緩衝區。

4.對流新增位元組會增加緩衝區大小。

linux c 記憶體相關函式

calloc 配置記憶體空間 相關函式 malloc,free,realloc,brk 表頭檔案 include 定義函式 void calloc size t nmemb,size t size 函式說明 calloc 用來配置nmemb個相鄰的記憶體單位,每一單位的大小為size,並返回指向第乙...

linux c 記憶體管理(二)

3.指標與陣列的比較 不同點 陣列 要麼在驚天儲存區域被建立 如全域性陣列 要麼在棧上被建立。陣列名對應著 而不是指向 一塊記憶體,其位址與容量在生命週期內保持不變,只有陣列的內容可以改變。指標 可以隨時指向任意型別的記憶體塊,它的特徵是 可變 所以我們常用指標來操作動態記憶體。兩者特徵比較的例子 ...

linux C複習 記憶體管理

1 虛擬記憶體位址 每個程序都有4g的虛擬記憶體位址,當程序需要真正的物理空間時,向系統申請,系統會分配給程序相應的物理記憶體空間。系統會將程序的一部分虛擬記憶體位址和分配好的物理記憶體之間一 一對應起來,這個過程叫記憶體對映。2 產生段錯誤的原因 1 當程式訪問或修改沒有許可權訪問或修改的記憶體空...