LinuxC C 程式設計(9) 對映記憶體

2021-07-12 06:25:42 字數 796 閱讀 2897

簡單來說,對映記憶體,就是建立硬碟檔案到程序位址空間的對映,在程序中讀寫這段對映記憶體,可以向硬碟檔案中直接同步。

利用這點,對映記憶體也可以像共享記憶體一樣,用來進行不同程序之間的通訊。(但共享記憶體的效率較高,因為不需要任何複製粘帖操作,而對映記憶體,所產生的只是記憶體到硬碟中的乙個對映,所以比較節省記憶體開銷,可以建立乙個空間很大的對映記憶體區來滿足程序間通訊的要求)

記憶體對映是linux中一種很有特色的機制,有空再更一下原理,先貼示例**:

#include #include #include #include #include #include using namespace std;

int main()

lseek(fd, 100, seek_set);//lseek可以讓檔案產生「空洞」

write(fd, "", 1);

lseek(fd, 0, seek_set);

char *filememory;

if ((filememory = (char*)mmap(0, 100, prot_write | prot_read, map_shared, fd, 0)) == null) //建立乙個4096位元組的對映記憶體

if (close(fd) == -1) //建立對映記憶體完畢,必須觀賞檔案描述符

char test[10] = "heiheihei";

strcpy(filememory, test);

if (munmap(filememory, 100) == -1)

return 0;

}

OpenCL OpenCL程式設計 對映記憶體物件

用opencl來對映記憶體資料通常分為三步 1.呼叫函式clenqueuemapbuffer或clenqueuemapimage,將記憶體對映命令入列。2.使用memcpy等函式對主機記憶體的資料進行傳輸。3.呼叫clenqueueunmapobject函式解對映記憶體。下面是對映和解對映函式的原型...

linux多執行緒 9 匿名記憶體對映

1 使用 dev zero檔案。2 形式上沒有檔案。先看第一種,由於 dev zero本來已經存在,因此open的時候不需要第三個引數,第二個引數指定為o rdwr即可。include include include include include include include struct fi...

linux c c 程式設計之 程序操作

程序 系統呼叫 getpid 可以得到程序的 id,而 getppid 可以得到父程序 建立呼叫該函式程序的程序 的 id.include pid t getpid void pid t getppid void struct passwd include include 程序的建立 include...