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).
Puede activar esta funcionalidad en todo el sistema utilizando kernel overcommit. Esta suele ser la configuración predeterminada en muchas distribuciones.
Aquí está la explicación http://www.mjmwired.net/kernel/Documentation/vm/overcommit-accounting