【发布时间】: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