ver tengo tag saber que procesos para memoria mas easytag consumen como comando linux memory-management virtualalloc

tengo - ver memoria ram linux terminal



¿Hay alguna manera de reservar pero no comprometer la memoria en Linux? (4)

"latencia inaceptable aparentemente aleatoria para matrices muy grandes

También podría considerar mlock () o mmap () + MAP_LOCKED para mitigar el impacto de la búsqueda. Muchas CPU admiten páginas grandes (también grandes), páginas de más de 4kb. Estas páginas más grandes pueden mitigar el impacto del TLB en las lecturas / escrituras de transmisión.

Windows tiene VirtualAlloc, que le permite reservar una región contigua de espacio de direcciones, pero no utiliza ninguna memoria física. Luego, cuando desee usarlo (o parte de él), vuelva a llamar a VirtualAlloc para confirmar la región de las páginas previamente reservadas.

En realidad, esto es realmente útil, pero finalmente quiero portar mi aplicación a Linux, así que no quiero usarla si no puedo portarla más tarde. ¿Linux tiene una forma de hacer esto?

EDITAR - Caso de uso

Estoy pensando en asignar 4 GB o algo así como espacio de direcciones virtuales, pero solo comprometiéndolo 64K a la vez. Esto me daría una forma de copia cero para hacer crecer una matriz de hasta 4 GB. Lo cual es importante, ya que el doble típico del tamaño y la copia de la matriz introduce una latencia inaceptable aparentemente aleatoria para arreglos muy grandes.


El equivalente de Linux de VirtualAlloc() es mmap , que proporciona los mismos comportamientos. Sin embargo, como señala un comentarista, la reserva de memoria contigua es el comportamiento de las llamadas a malloc() siempre que la memoria no se inicialice (por ejemplo, mediante calloc() o código de usuario).



mmap un archivo especial, como /dev/zero (o use MAP_ANONYMOUS) como PROT_NONE , luego use mprotect para confirmar.