【问题标题】:Is there any possible way to change a memory location to a shared memory in C?有没有可能的方法将内存位置更改为 C 中的共享内存?
【发布时间】:2011-04-09 14:34:06
【问题描述】:

在c中你可以做

shmid = shmget(SHMEM_KEY, sizeof(int*) * n , SHEMEM_MODE | IPC_CREAT);
int* shmem = shmat(shmid, NULL, 0);

将第一个给定的空闲内存空间分配为共享内存。

有没有办法将当前内存空间分配为共享内存?

【问题讨论】:

  • 我不这么认为。我认为(但不要引用我的话)私有内存和共享内存之间的区别在于它所在的位置。所以我不认为你可以“分配”一个共享的内存位置。但是,我可能错了。

标签: c posix shared-memory sysv


【解决方案1】:

您使用shmat() 将您创建的共享内存别名为地址空间中的任意页面对齐范围

所以这并没有占用你已经拥有的一些内存并发布它;它占用了一些新的共享内存,然后复制您想要发布的内容,然后使用 shmat 将其别名为您想要发布的内容 - 这具有相同的效果。

【讨论】:

  • 我不是很清楚,你能用实际的语法来消除歧义吗?
【解决方案2】:

首先我建议不要使用旧的shmget 接口,但是 更现代的 POSIX 接口 shm_open 和 mmap(如果你有它们, 你没有指定你的系统)

然后mmap 允许您在地址空间中提出地址 您希望细分的位置

这不是您所要求的,但您可以做到的最接近 得到,我认为

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多