2015-04-15 3 views
0

Я сталкиваюсь с проблемами при попытке скомпилировать свой код C на Win64. Более конкретно, компилятор не может найти заголовок sys/mman.h, который, как я понимаю, находится только в средах Unix.Эквивалент Windows для 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

Смежные вопросы