jakbym mmap() niektóre PRYWATNE i anonimowe stron, a następnie rozszerzyć je mremap(), czy nowa przestrzeń się również inicjowane zerami?Czy mremap "inicjalizuje" pamięć na wzrost?
Próbowałem czytać kod mremap (mm/mremap.c) w źródłach Linuksa, ale to wymaga pewnej wiedzy specyficzne dla domeny, które nie mają obecnie (VMA _ ### rzeczy). nawet nie wiesz, że to właściwe miejsce, aby wyglądać ...
Ale, z tego co ja zebrane myślę że mremap() Pamięć ed będzie wyczyszczone, jest to prawidłowe?
Przydział odbywa się ten
list = mmap(NULL, newSize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0)
a następnie remap odbywa się ten
newList = mremap(list, oldSize, newSize, MREMAP_MAYMOVE)
Ah, i ostatni, to Linux konkretne pytanie, uruchomiony niedawno jądro (> = 2.6.28) i libc (> = 2.11.1)
Tak. Wszystko oprócz zerowych stron byłoby również luką bezpieczeństwa. –
Mylisz się o mapowania kopiowania przy zapisie uniwersalnej strony zerowej. Przynajmniej w Linuksie nie jest tak, jak działa 'mmap()'. Dostajesz fizyczne strony odwzorowane przy pierwszym dostępie do zmapowanej pamięci, i jest to procedura obsługi błędów strony kernela, która zeruje fizyczną stronę i mapuje ją. Brak uniwersalnej strony zerowej. –
Czy jesteś pewien? Z pewnością dla anonimowych odwzorowań tylko do odczytu nie tworzy fizycznej strony dla każdej strony. To, co powiedziałem, jest w pewnym sensie prawdziwe, jeśli umożliwisz scalanie duplikatów, ale ogólnie mogę się mylić; Nie RTFS go przetestowałem. –