为了重新分配共享内存,我目前正在使用mremap来扩大特定的共享内存大小。以下是为实现此目标而使用的声明:
char *mem = (char*)mremap(addr, sizeof(addr), mem_range + 1, MREMAP_MAYMOVE);
尽管包含:
#define _GNU_SOURCE
#include <sys/mman.h>
Eclipse显示Symbol 'MREMAP_MAYMOVE' could not be resolved
。
但是,鉴于eclipse显示上述错误,代码正在编译。
以下显示了此方案:
提前致谢!
答案 0 :(得分:1)
以下代码在SuSE Linux SLES11上编译和链接没有错误或警告:
gcc -Wall -o test test.c
#define _GNU_SOURCE
#include <sys/mman.h>
#include <stdio.h>
int main()
{
void *oldMapAddress = NULL;
size_t oldMapSize = 512;
size_t newMapSize = 1024;
void *newMapAddress = NULL;
newMapAddress = mremap(oldMapAddress, oldMapSize, newMapSize, MREMAP_MAYMOVE);
return(0);
}
以上代码不会被执行。它只是编译器/链接器证明。
答案 1 :(得分:0)
为了解决这个问题,我只需要包括:
#include <linux/mman.h>
代替#include <sys/mman.h>
显然这是Ubuntu中的一个错误,指的是:https://bugs.launchpad.net/ubuntu/+source/alsa-plugins/+bug/1075718