En un sistema Linux de 32 bits, un proceso puede acceder a hasta 4 GB de espacio de direcciones virtuales; sin embargo, los procesos parecen ser conservadores en diversos grados al reservar cualquiera de estos. Por lo tanto, un programa que utiliza malloc ocasionalmente aumentará su segmento de datos mediante syscall sbrk/brk. Incluso esas páginas aún no se reclaman en la memoria física. Lo que no entiendo completamente es por qué necesitamos hacerlo, ¿por qué no solo darme 4 GB de espacio de direcciones evitando cualquier llamada sbrk, ya que hasta que toque/reclame esos bloques, es esencialmente una operación gratuita, ¿no?Memoria virtual y sbrk
Respuesta
¿Qué sucede si hace un mapa de memoria de un archivo (algo muy común en Linux)? Tiene que ir a algún lugar en el espacio de direcciones, por lo que debe haber algunos medios para definir partes "usadas" y "no usadas".
La memoria compartida (que en realidad solo corresponde a un archivo sin un archivo real) es la misma. Tiene que ir a alguna parte, y el sistema operativo debe estar seguro de poder colocarlo sin sobreescribir algo.
Además, es preferible mantener la localidad de referencia por razones de eficiencia obvias (y menos obvias). Si se le permitiera simplemente escribir y leer desde cualquier ubicación en su espacio de direcciones, puede apostar que algunas personas harían precisamente eso.
Hay un par de razones por las que vienen a la mente:
- Se podría ya no se consigue segfaults cuando se accede a la memoria no asignada
- El Translation lookaside buffer (TLB) sería mayor, posiblemente requiriendo más tiempo para configurarlo hasta
- Habría que desasignar algunos de que la memoria de todas formas si se carga en una nueva biblioteca o mmap compartida() algo
- 1. ¿Cómo puedo liberar memoria obtenida por sbrk()?
- 2. ¿Memoria virtual?
- 3. Memoria virtual
- 4. ¿Cómo funciona sbrk() en C++?
- 5. ¿Admite Android la memoria virtual
- 6. ¿La memoria virtual es infinita?
- 7. Recolector de elementos no utilizados .NET y memoria virtual x64
- 8. Memoria virtual y alineación: ¿cómo se factorizan juntas?
- 9. uso práctico de la memoria virtual
- 10. Comprensión de dirección virtual y espacio de dirección virtual
- 11. Aplicación de iPhone y iPad Uso de memoria real y virtual
- 12. Espacio de dirección del proceso frente a la memoria virtual
- 13. Alto uso de memoria virtual + bajas asignaciones en iOS
- 14. ¿Por qué mi programa Winforms reserva tanta memoria virtual?
- 15. ¿Debo gestionar páginas o simplemente apoyarme en la memoria virtual?
- 16. ¿Cómo limitar el uso de memoria virtual por node.js?
- 17. Alto uso de la memoria virtual de Node.js
- 18. Posible pérdida de memoria sin un destructor virtual?
- 19. ¿Cómo encontrar el tamaño de la memoria virtual y el tamaño de la memoria caché de un sistema Linux?
- 20. diferencia entre una función virtual y una función virtual pura
- 21. Uso de memoria virtual de Java en Linux, demasiada memoria utilizada
- 22. ¿Por qué apache mantiene desplazamientos en la memoria donde php-cli contiene direcciones de memoria virtual?
- 23. Herencia virtual y temido diamante
- 24. micrófono virtual, redes y vb.net
- 25. Constructor predeterminado y herencia virtual
- 26. ¿Qué significa "Sucio" y "Residente" en relación con la memoria virtual?
- 27. VA (Dirección virtual) & RVA (Dirección virtual relativa)
- 28. C++, base virtual abstracta protegida virtual virtual privado destructor
- 29. asignación de matriz y el acceso a la máquina y la memoria virtual de contención de Java
- 30. ¿Debería escribir "público virtual" o "público virtual" en herencia virtual?
"memoria compartida (que en realidad es sólo la asignación de un archivo sin un archivo real) es el mismo. Tiene que ir a alguna parte, y el sistema operativo debe estar seguro de que puede colocarlo sin sobreescribir algo. "Veo lo que dices (creo), como malloc llama a mmap (con anónimo y privado) Creo y eso puede o puede no llame a sbrk, pero si en el programa init malloc ha hecho brk (4gb), elimina el syscall de sbrk, etc. Pero ya no puede mapear archivos de mapas de memoria adicionales o crear memoria compartida con diferentes indicadores. Bien ... Creo que Estoy comenzando a entender –
"Además, es preferible mantener la localidad de referencia por razones de eficiencia obvias (y menos obvias)" Pero si tomo algo de memoria de digamos 1 gb en un bloque de 4 gb y digamos 3.9 gb en el bloque de 4 gb, probablemente lo haga estar cerca en la memoria física una vez que la nueva asignación se segrega por error (simplemente poner a cero a la derecha)? –
Podría, podría no. Usted no puede saber. – Damon