360网站seo手机优化软件网站建设 计入哪个科目
2025/12/27 0:24:32 网站建设 项目流程
360网站seo手机优化软件,网站建设 计入哪个科目,网站备案是域名备案还是空间备案,电商运营转行后悔了共享内存的基本原理1. 核心步骤要在 Linux 中使用 System V 共享内存#xff0c;通常遵循以下“四步走”#xff1a;创建/获取 (Create/Get)#xff1a;向内核申请一块共享内存#xff0c;就像 malloc 一样#xff0c;但这是内核管理的。系统调用#xff1a;shmget关联 (…共享内存的基本原理1. 核心步骤要在 Linux 中使用 System V 共享内存通常遵循以下“四步走”创建/获取 (Create/Get)向内核申请一块共享内存就像malloc一样但这是内核管理的。系统调用shmget关联 (Attach)把这块物理内存“挂接”到当前进程的虚拟地址空间堆栈之间。挂接后这就变成了你进程内的一个指针。系统调用shmat(Shared Memory Attach)使用 (Use)像使用普通数组或指针一样读写数据。去关联 (Detach)用完了把这块内存从页表中去掉断开联系。系统调用shmdt(Shared Memory Detach)删除 (Control/Remove)如果所有进程都不用了需要请求内核释放这块物理内存。系统调用shmctl2. 这里的“坑”生命周期这是一个极其重要的概念也是和管道最大的区别。管道进程退出了管道就自动销毁了匿名管道或者没人用时虽然文件在但数据清空了命名管道。共享内存随内核 (Kernel Persistence)。如果你创建了共享内存进程 A 退出了进程 B 也退出了但这块内存依然存在于内核中除非你显式调用代码删除它或者重启操作系统否则它会一直占用物理内存。后果调试代码时如果程序崩溃没来得及清理你会发现内存泄漏下次启动程序可能报错“File exists”。系统调用详解为了写代码我们需要先认识这几个核心函数的参数。这部分比mkfifo复杂涉及到一个新的概念Key。1.ftok—— 生成唯一标识符怎么让两个无关的进程Server 和 Client找到同一个共享内存呢命名管道靠文件路径唯一。共享内存靠Key 值唯一。我们需要一个算法把一个文件路径和一个项目 ID 转换成一个唯一的数字 Key。#include sys/types.h #include sys/ipc.h key_t ftok(const char *pathname, int proj_id);pathname一个存在的文件路径通常用当前目录.。proj_id一个整数通常写个字符如a。返回值成功返回生成的key_t两端只要传入相同的路径和 ID就能得到相同的 Key。2.shmget—— 创建共享内存#include sys/ipc.h #include sys/shm.h int shmget(key_t key, size_t size, int shmflg);key刚才ftok生成的那个 Key。size申请多少字节建议是 4KB 的整数倍因为操作系统按页分配内存如果你申请 4097 字节OS 实际会分配 8KB但你只能用 4097。shmflg标志位和权限。IPC_CREAT不存在就创建存在就获取。IPC_EXCL配合IPC_CREAT使用如果存在则报错用于确保我是第一个创建的。权限类似文件权限如0666。返回值成功返回shmid共享内存 ID类似文件描述符fd失败返回 -1。3.shmat—— 挂接void *shmat(int shmid, const void *shmaddr, int shmflg);shmidshmget返回的 ID。shmaddr想挂载到虚拟内存的哪个地址通常传NULL让内核自己找个风水宝地。shmflg读写模式默认为 0可读写。返回值成功返回共享内存的首地址void*失败返回 -1。4.shmctl—— 控制/删除int shmctl(int shmid, int cmd, struct shmid_ds *buf);cmd常用IPC_RMIDRemove ID标记删除。注意IPC_RMID只是标记删除。只有当连接这块内存的所有进程都shmdt断开后物理内存才会真正释放。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询