Понимание параметра размера mmap - PullRequest
1 голос
/ 23 февраля 2012

Мне трудно понять параметр размера mmap (извините, мой C ржавый).Например (взято из другого SO сообщения)

Если у нас есть:

typedef struct container {
    int counter;
} container;

container *memory;
memory = mmap(NULL, 500*sizeof(container), PROT_READ|PROT_WRITE, MAP_SHARED, -1, 0);

container *entry = (container *) malloc(sizeof(container));
entry->counter = 1;
// Just arbitrarily
memory[1] = *entry;

Не будет ли память [1] просто указателем на контейнер и, следовательно, не будет sizeof (контейнером))?Или есть способ использовать mmap, который действительно обеспечит вставку только 500 записей контейнера?Или доступ к памяти должен осуществляться с шагом sizeof (контейнера)?

Спасибо!

1 Ответ

2 голосов
/ 23 февраля 2012

Прежде всего, пока вы используете mmap для получения памяти, ничего в вашем вопросе не относится к mmap.Те же выводы применимы, если вы просто делаете:

container *memory = malloc(500*sizeof(container));

В любом случае у вас есть блок памяти длиной 500*sizeof(container) байтов, и возвращенный указатель может рассматриваться как указывающий на первый элементмассива 500 container структур.

...