内存共享
Posted qiuyuwutong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内存共享相关的知识,希望对你有一定的参考价值。
前提:基于Linux系统的学习
共享内存
1 获取键值 ftok(3)
2 使用shmget(2)向系统申请共享内存段的id.
3 将共享内存段关联到进程 shmat(2)
4 内存的操作
5 解除共享内存段和进程的关联 shmdt(2)
//shm_w.c #include <stdio.h> #include <sys/ipc.h> #include <sys/shm.h> #include <sys/types.h> #include <sys/ipc.h> #include <string.h> int main(){ //获取键值 ftok key_t key=ftok(".", 23); if(key==-1){ perror("ftok"); return -1; } //向系统申请共享内存段id, shmget int id=shmget(key,1024,IPC_CREAT|0644); if(id==-1){ perror("shmget"); return -1; } //将共享内存段关联到进程 shmat void* shm_p=shmat(id,NULL,0); if(shm_p==(void*)-1){ perror("shmat"); return -1; } //内存的操作 strcpy((char*)shm_p,"hector hahah "); //解除共享内存段和进程的关系 shmdt shmdt(shm_p); return 0; }
//shm_r.c #include <stdio.h> #include <sys/ipc.h> #include <sys/shm.h> #include <sys/types.h> #include <sys/ipc.h> #include <string.h> int main(){ //获取键值 ftok key_t key=ftok(".", 23); if(key==-1){ perror("ftok"); return -1; } //向系统申请共享内存段id, shmget int id=shmget(key,1024,IPC_CREAT|0644); if(id==-1){ perror("shmget"); return -1; } //将共享内存段关联到进程 shmat void* shm_p=shmat(id,NULL,0); if(shm_p==(void*)-1){ perror("shmat"); return -1; } //内存的操作 puts((char*)shm_p); //解除共享内存段和进程的关系 shmdt shmdt(shm_p); return 0; }
以上是关于内存共享的主要内容,如果未能解决你的问题,请参考以下文章
如何使用模块化代码片段中的LeakCanary检测内存泄漏?
仅在按照意图进行时才更改片段(在这种情况下,他们实际上共享应用程序)