Я полагал, что 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 при расширении не используется) с анонимно отображенной памятью, или есть ли некоторые подобные методы, простые и быстрые?
спасибо всем заранее: -)