¿Puede una aplicación comprometer y liberar memoria explícitamente?

¿Puede una aplicación comprometer y liberar memoria explícitamente?

¿Es posible, desde una aplicación, controlar explícitamente las confirmaciones de páginas de memoria? En una aplicación de Windows hace muchos años, escribí un administrador de montón de "sistema de alarma" para ayudarme a encontrar un error de corrupción de montón/referencia colgante aleatorio. Pude reservar una gran área de memoria virtual y luego confirmar/desconfirmar páginas a voluntad. La idea en ese momento era crear un conjunto que contuviera una página no confirmada, seguida de una o más páginas confirmadas (suficientes para completar la solicitud), seguida de otra página no confirmada; con un indicador en tiempo de compilación que controlaba si el puntero devuelto a la persona que llama estaba al principio o al final de la región comprometida (para activar instantáneamente una excepción en una suscripción o sobrescritura, respectivamente). Windows proporciona una API para reservar regiones de memoria y confirmar páginas. Tengo otro uso para este tipo de buffer en un programa de Linux que estoy escribiendo, y me pregunto si el kernel proporciona el mismo tipo de funcionalidad.

Respuesta1

Supongo que te refieresVirtualAllocyamigos. Hasta donde yo sé, no existe un equivalente directo en Linux, pero puedes lograr el mismo efecto de varias maneras. Si desea reservar memoria, puede utilizarmmap(2); para confirmarlo, es necesario escribirle; para descomprimirlo, puedes usarmadvise(2)'s MADV_DONTNEED.

Para implementar páginas de guardia, es posible que encuentremprotect(2)para ser una mejor opción, junto con un SIGSEGVmanejador. También puede consultar la protección contra desbordamiento proporcionada por su compilador ( -fstack-protectoretc., y las diversas -fsanitizeopciones).

Respuesta2

Si simplemente desea depurar sus propios programas, en lugar de implementar un administrador de memoria complicado, le recomiendo que simplemente use un programa comovalgrindpara detectar pérdidas de memoria y punteros pendientes.

información relacionada