【问题标题】:How to break down allocated memory into several regions and assign process?如何将分配的内存分解为多个区域并分配进程?
【发布时间】:2012-04-13 15:06:47
【问题描述】:

我了解如何使用分配“一大块”内存

int shmget(IPC_PRIVATE, int size, IPC_CREAT | 0666)

但是,如何将这一内存区域分解为多个区域? 例如,

[          heap           ]
[region1][region2][region3]

然后,我相信在我必须使用的每个分叉进程中

int shmget(key_t shmid, 0, 0666)

访问我猜的区域?..

我在很多与内存分配相关的在线网站上也看到“偏移”一词......这是什么意思?..

【问题讨论】:

  • 我不明白这个问题。它本质上是技术性的,比如“我用什么函数来___?”还是本质上是算法,例如“我怎么知道我的共享内存中的某个区域已被分配或释放?”
  • 嗯,我的问题更多的是,使用什么功能。我不知道如何让多个进程同时分配和释放内存部分。例如,进程 1 将内存分配给区域 1,进程 2 释放区域 2 的内存(已分配)。经过更多搜索,我现在相信我必须使用 shmget 一次,然后使用 void* shmat(int shmid, (void *) 0, 0) 次数将堆分解为多个区域。 ..
  • 现在使用 void* shmat(int shmid, (void *) 0, 0),而不是 (void *) 0 如果我给映射的特定地址,如果它给 -1 则不知道它映射内存部分失败,这意味着该空间中已经分配了一些内存......对吗?

标签: c linux memory memory-management


【解决方案1】:

在现代 linux 系统上,没有太多理由使用 shmget & Co. 将 shm_openmmap 一起使用。该界面更易于使用。

我不明白您是否想自愿划分地图,或者这只是您阅读有关shmget 的内容的结果。但是使用mmap,您可以轻松地绘制该地区的部分地图,如果您愿意的话。

【讨论】:

    猜你喜欢
    • 2021-04-18
    • 2016-12-24
    • 1970-01-01
    • 2011-08-30
    • 2012-03-10
    • 2011-09-21
    • 2012-09-24
    • 1970-01-01
    相关资源
    最近更新 更多