Индекс в ММАП? - PullRequest
       52

Индекс в ММАП?

0 голосов
/ 22 февраля 2012

Я пытаюсь создать массив структур как некий элементарный кеш.

Учитывая указатель void * на mmap, предоставляет ли mmap какие-либо возможности для индексации в нем? Я думаю, что концептуально mmap просто предоставляет блок памяти, но затем я немного запутался в том, что я могу с ним сделать. Могу ли я думать об этом как о malloc?

void * mptr = mmap(NULL, 1024*1024, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);

Спасибо за любые разъяснения здесь.

Ответы [ 2 ]

1 голос
/ 22 февраля 2012

Да, вы можете думать о нем как о malloc, но вы должны освободить его с помощью munmap (mptr, 1024 * 1024), а не free (mptr).

Если вы хотите проиндексировать его, приведите его к другому типу, например, char:

char *cptr = (char*) mptr; 

Затем вы можете внести в него индекс, например, с помощью cptr [10].

1 голос
/ 22 февраля 2012

Независимо от того, какой распределитель вы используете (mmap, malloc, sbrk, ...), у вас все еще остается указатель на память.Прежде чем вы сможете использовать память, вы должны указать компилятору, что типов живет в этой памяти.Используйте приведение в стиле C или C ++, чтобы сообщить компилятору, как обрабатывать память.

...