Я пытаюсь перекодировать таНос и бесплатные функции, но я получил проблему с munmap ..Как использовать munmap пользовательского таНос
С моим пользовательским таНосом, создать пул памяти с ттар (Ex: 4Kb) , поэтому я могу вернуть индекс этого пула в качестве адреса при вызове malloc.
Это отлично работает, но когда я использую мои беспошлинные (Звонок в munmap), то я хочу, чтобы выделить что-то другое с моим пользовательским таНосом, я получил Segfault, как если бы мой весь пул был disallocated по munmap ..
Пример:
Ask 1024 bytes to my malloc
-> First call so malloc allocate a pool of 4 * pagesize() (So 16 000
bytes)
-> Return to me an addr than I use. (addr[0] = 42)
-> Free with munmap this address (munmap(addr, 1024))
-> re ask to my malloc 1024 bytes
-> Try to fill it with something and segfault.
Я действительно не понимаю, что происходит. Удаляет ли munmap весь мой пул?
К сожалению для бедных английского ..
Так что, если я прошу дважды 1024 моего malloc, а затем я хочу отключить первый, я не могу, потому что на моей системе 4096 страниц? Я прав ? Но, так, у меня будут утечки в этом случае И в этом случае, чтобы заслужить второй аргумент munmap? –
@JeanYim Вы правы. Второй аргумент имеет смысл только в том случае, если он больше, чем 'PAGE_SIZE'. Вы можете разделить более одной страницы за раз. У вас будет фрагментация, но не более 4K, что не так уж плохо. Вы сохраняете это, освободив 1024 байта, в следующий раз, когда процесс запрашивает <= 1024. Если пользователь освободит целую страницу, вы можете ее отменить. – mtijanic
Спасибо большое! Последний вопрос, так что вторым аргументом является число страниц для разблокировки? Не количество бесплатных октетов? (Я считал, что) –