Um aplicativo pode confirmar e descomprometer explicitamente a memória?

Um aplicativo pode confirmar e descomprometer explicitamente a memória?

É possível - a partir de um aplicativo - controlar explicitamente as confirmações de páginas de memória? Em um aplicativo do Windows, há muitos anos, escrevi um gerenciador de heap de "sistema de alarme" para me ajudar a encontrar um bug aleatório de referência/corrupção de heap. Consegui reservar uma grande área de memória virtual e, em seguida, confirmar/descomprometer páginas à vontade. A ideia na época era criar um conjunto contendo uma página não confirmada, seguida de uma ou mais páginas comprometidas (suficientes para atender a solicitação), seguida de outra página não confirmada; com um sinalizador de tempo de compilação que controlava se o ponteiro retornado ao chamador estava no início ou no final da região confirmada (para disparar instantaneamente uma exceção em uma subscrição ou substituição, respectivamente). O Windows fornece uma API para reservar regiões de memória e confirmar páginas. Tenho outro uso para esse buffer de livro em um programa Linux que estou escrevendo e estou me perguntando se o kernel fornece o mesmo tipo de funcionalidade.

Responder1

Presumo que você esteja se referindoVirtualAlloceamigos. Até onde eu sei, não há equivalente direto no Linux, mas você pode obter o mesmo efeito de várias maneiras. Se você quiser reservar memória, você pode usarmmap(2); para confirmá-lo, você precisa escrever para ele; para descomprometê-lo, você pode usarmadvise(2)é MADV_DONTNEED.

Para implementar páginas de proteção, você pode encontrarmprotect(2)para ser uma opção melhor, junto com um SIGSEGVmanipulador. Você também pode observar a proteção contra overflow fornecida pelo seu compilador ( -fstack-protectoretc., e as várias -fsanitizeopções).

Responder2

Se você simplesmente deseja depurar seus próprios programas, em vez de implementar um gerenciador de memória complicado, recomendo que você simplesmente use um programa comovalgrindpara detectar vazamentos de memória e ponteiros pendentes.

informação relacionada