¿Cómo un programa de razonamiento poco preciso asigna 8 gb de memoria en 3 segundos?

Como solo conozco aspectos internos de Linux, intentaré darte una respuesta en esta plataforma. El programa llama a calloc que solicita al sistema operativo que asigne una porción de memoria a su espacio de direcciones. El núcleo, a su vez, asignará inmediatamente la nueva memoria al espacio de direcciones del proceso. Sin embargo, esta es una memoria sobre comprometida, en realidad no está allí. Algunos creen que este es un error horrible en la arquitectura de Linux, algunos creen que es una característica. Sin embargo, puede activarse / desactivarse utilizando vm.overcommit_memory sysctl.

De todos modos, para estar en el tema: el sistema operativo decidirá cómo se manejará esa memoria (¡también puede mentir al respecto!). Por lo tanto, más adelante puede ocurrir un intercambio, si la memoria disponible no es suficiente. En su caso, los 8 GB probablemente estaban disponibles y el núcleo no tuvo que intercambiarse más adelante. No revisé el algoritmo, pero si se usa todo el 8GB, entonces este fue ciertamente el caso. Como la asignación de memoria se realiza simplemente modificando algunas variables internas del kernel, es muy rápido si no es necesario realizar operaciones adicionales (intercambio).

Por lo que parece, la asignación tomó muy poco. Si se ejecutó en Linux, tiene un esquema de asignación de memoria optimista que en realidad asignará las páginas de memoria cuando las necesite: lo único que difiere de calloc y el calloc normal es que cuando realmente accederá a esas páginas, las páginas será puesto a cero El error de segmentación se produjo muy probablemente cuando finalmente no se pudo asignar una nueva página.

Pero no puedo decir con certeza. De todos modos, el presentador dijo que duró más de 3 segundos.

More Interesting

¿Qué es un algoritmo para generar todos los gráficos?

¿Por qué los programadores experimentados dicen que la programación del mundo real es completamente diferente a la programación competitiva?

¿Cuáles son algunas aplicaciones del mundo real de parábolas?

¿Cuál es el algoritmo perfecto para extraer la forma, el color, la textura y los bordes de las partes cilíndricas en MATLAB en preparación para el aprendizaje supervisado?

¿Qué algoritmos puedo usar para predecir la temperatura o dichos parámetros en función de sus datos históricos?

¿Es este algoritmo para la predicción de acciones bueno o lógico? ¿Es original?

Si U = {todos los enteros positivos menores o iguales a 30} y N = {todos los números impares menores o iguales a 19}, ¿qué es N 'y n (N')?

¿Hay algún sitio web para encontrar la complejidad del tiempo de diferentes algoritmos?

¿Cuál es el algoritmo de coincidencia utilizado por las declaraciones de consulta SQL del servidor SQL como "Me gusta 'A%'", "Me gusta '% A'" o "Me gusta '% A%'"?

¿Cómo obtenemos ideas para resolver preguntas de programación dinámica?

¿Nuestro código genético utiliza algoritmos de compresión?

¿Qué es un contador Loglog?

Cómo aprender estructuras de datos y algoritmos lo suficientemente buenos como para conseguir un trabajo en 10 meses

¿Cuál es el mejor algoritmo para ordenar una pila de 400 exámenes de algoritmos, si tiene 16 TA?

¿En qué tipos de gráfico DFS y BFS producirán el mismo árbol (misma fuente) independientemente de la secuencia de visitas de los vecinos?