2015-04-15 193 views
0

我在Win64上编译我的C代码时遇到了问题。更具体地说,编译器找不到sys/mman.h标头,我的理解仅在Unix环境中找到。sys等同于sys/mman.h

我已经知道这是处理内存分配。

是否有一个等效的Windows我可以用来移植代码(第一次尝试)?

代码中导致问题:

/* Allocate memory required by processes */ 
buf = (int*) malloc (sizeof(int)); 
if (!buf) 
{ 
    perror("Error"); 
    free (buf); 
    return -3; 
} 

/* Lock down pages mapped to processes */ 
puts("Locking down processes."); 
if(mlockall (MCL_CURRENT | MCL_FUTURE) < 0) 
{ 
    perror("mlockall"); 
    free (buf); 
    return -4; 
} 
+0

不是直接的,WINAPI有它自己的函数,通过'windows.h'包含了相同的东西,但是这些函数只是POSIX,并且在Windows上不可用。所以所问的问题不能被回答,因为没有等价的标题。 – Mgetz

+0

@Mgetz虽然我同意,它本身并不,我的回应链接的win32库应该做的伎俩。 – Mekap

+2

@Mekap或者他们可以用['VirtualAllocEx'](https://msdn.microsoft.com/en-us/library/windows/desktop/aa366890(v = vs.85).aspx)以本地方式执行它[和堂兄弟 – Mgetz

回答

2

你应该看看mman-win32 library。但正如@Mgetz指出的,更简单的方法是查看[VirtualAllocEx][2]函数并尝试修改代码。

+0

非常感谢您的回答,但是编译器在mlockall函数中遇到了问题。这可以用'VirtualAllocEx'函数替代吗?还是仅仅分配内存(有点像上面的malloc,这似乎是工作的)? (我知道我没有在原始问题中指定这个,我可能应该这样做)。 – youjustreadthis

+0

VirtualLock可能是我正在寻找的... – youjustreadthis