您好,登錄后才能下訂單哦!
這篇文章主要講解了“數據庫內存共享實現原理是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“數據庫內存共享實現原理是什么”吧!
共享內存是進程間通訊的一種方式,PostgreSQL使用共享內存緩存數據以及各種數據結構.
下面是演示代碼,邏輯很簡單,自行參考代碼注釋.
/* 申請一段共享內存,父進程寫入一串字符,子進程讀出。 */ #include <stdio.h> #include <sys/ipc.h> #include <sys/shm.h> #include <sys/types.h> #include <unistd.h> #include <stdlib.h> //1k共享內存 #define SHM_SIZE 1024 #define SHM_ID 10086 int main() { //共享內存id,子進程id int shmid, pid; //共享內存指針 char *ptr = NULL; //申請共享內存 shmid = shmget((key_t)SHM_ID, SHM_SIZE, IPC_CREAT | 0600); //映射共享內存到進程地址空間 ptr = (char *)shmat(shmid, 0, 0); printf("Attach pointer addr is %p \n", ptr); ptr = "This is shared memory!"; printf("The String of Parent Process is : %s \n", ptr); if((pid = fork()) == -1) { perror("fork process error!"); exit(0); } else if(!pid) { printf("Child Process PID is : %d,String is %s \n", pid,ptr); exit(0); }else{ sleep(1); //解除映射 shmdt(ptr); //刪除共享內存 shmctl(shmid, IPC_RMID, 0); } return 0; }
運行輸出
[pg12@localhost ipc]$ gcc -std=c11 -o fork fork.c In file included from fork.c:7:0: /usr/include/sys/ipc.h:24:3: warning: #warning "Files using this header must be compiled with _SVID_SOURCE or _XOPEN_SOURCE" [-Wcpp] # warning "Files using this header must be compiled with _SVID_SOURCE or _XOPEN_SOURCE" ^ [pg12@localhost ipc]$ ./fork Attach pointer addr is 0x7f61ffb6b000 The String of Parent Process is : This is shared memory! Child Process PID is : 0,String is This is shared memory! [pg12@localhost ipc]$
感謝各位的閱讀,以上就是“數據庫內存共享實現原理是什么”的內容了,經過本文的學習后,相信大家對數據庫內存共享實現原理是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。