расширяемый mremap на анонимно mmaped памяти - PullRequest
2 голосов
/ 22 августа 2011

Я полагал, что mremap будет иметь поведение, похожее на realloc, до отладки таких вещей, как следующие строки кода в C.

#define PAGESIZE 0x1000
void *p = mmap(0, PAGESIZE, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_ANONYMOUS | MAP_SHARED, -1, 0);
void *p2 = mremap(p, PAGESIZE, PAGESIZE * 2, MREMAP_MAYMOVE);
// then any future access to the 2nd page in p2 would generate a nice SIGBUS

После просмотра нескольких старых тем в некоторых списках рассылки я знаю, что mmap изначально был разработан для «чистого» сопоставления файлов, и люди, которые разработали mremap, похоже, не заботятся о кодах, подобных описанным выше.

Я знаю, что для этого подойдет объект с общей памятью. Но shm_open / shm_unlink требуют имен файлов, и я не хочу иметь дело со строками в этом самом проекте. И я не уверен, что, возможно, объекты общей памяти более или менее снизят производительность моего приложения.

Мне просто интересно, можно ли сделать так, чтобы mremap работал нормально (отлично означает, что SIGBUS при расширении не используется) с анонимно отображенной памятью, или есть ли некоторые подобные методы, простые и быстрые?

спасибо всем заранее: -)

...