cuando obtenemos la dirección de una función o cualquier objeto, ¿es la dirección virtual o la dirección física de ese objeto?puntero a la función: dirección física o virtual
10
A
Respuesta
11
¿Está preguntando sobre punteros en general?
En la mayoría de los sistemas operativos, son direcciones lógicas.
El sistema operativo es responsable de traducirlos en direcciones físicas a través de la memoria virtual y el mecanismo de búsqueda. Esto es transparente para el programa. Es por eso que un programa equivocado "llega a los límites" y los GPF.
En algunos sistemas antiguos (por ejemplo, DOS), serían físicos, lo que le permite sobrescribir cosas en otras partes de la memoria.
7
Depende del sistema operativo y en qué nivel se está ejecutando su código.
Para un programa usuario-terreno normal en un sistema operativo moderno, obtendrá la dirección virtual.
Cuestiones relacionadas
- 1. ¿Cómo traducir una dirección de memoria virtual a una dirección física?
- 2. VA (Dirección virtual) & RVA (Dirección virtual relativa)
- 3. convertir de la ruta física a la ruta virtual
- 4. Llamar a una función virtual estáticamente a través de un puntero a la función
- 5. Asignación de direcciones físicas a la dirección virtual de Linux
- 6. Espacio de dirección del proceso frente a la memoria virtual
- 7. Imprimir la dirección de la función de miembro virtual
- 8. Pasar la función puntero a miembro como puntero a función
- 9. Cómo identificar si una unidad es virtual o física
- 10. Cómo llamar a la función cuando el usuario permite o niega el acceso a "Ubicación física"?
- 11. ¿Todavía se invoca un puntero a una función virtual de forma virtual?
- 12. Comprensión de dirección virtual y espacio de dirección virtual
- 13. Llamando a la definición de la clase base de la función de miembro virtual con el puntero de función
- 14. Cómo obtener la ruta física del directorio virtual
- 15. Puntero de función con GCC, asignando una dirección
- 16. Server.MapPath - Ruta física dada, ruta virtual espera
- 17. puntero de la función Typedef?
- 18. puntero Inicializar a puntero con múltiples operadores de dirección en C o C++
- 19. traducción de dirección virtual del kernel
- 20. Crear un puntero a la función que toma un puntero a la función como argumento
- 21. puntero a la asignación de función
- 22. Obtención de una ruta virtual relativa desde la ruta física
- 23. dirección de puntero delphi
- 24. Inicializar Puntero A través de la función
- 25. Puntero a una dirección fija específica
- 26. ¿El puntero C/C++ guarda la dirección de memoria absoluta, o relativa a la aplicación, o relativa al módulo?
- 27. ¿Dirección del puntero desreferenciado?
- 28. Puntero/Dirección de diferencia
- 29. ¿Cómo obtengo la dirección física (MAC) de una dirección IP usando C#?
- 30. función virtual en herencia privada o protegida
pero si ejecuto el siguiente prog: int main() {int (* p)(); p = main; printf ("% p", p);} está dando una dirección como 0x80483c4, cree que es una dirección física, ¿por qué la dirección virtual de inicio principal en una dirección tan grande? estoy ejecutando esto en linux.plz aclarar si estoy equivocado ?? – mawia
Estás equivocado. Esa es una dirección virtual. Nadie dijo que tu función main() se carga en la dirección virtual 0. De hecho, de forma predeterminada en los binarios ELF (usados en Linux), el segmento de código comienza en la dirección virtual 0x80482c0, que se ve exactamente bien (hay una configuración oculta) código antes de main()). Tenga en cuenta que el espacio de direcciones virtuales a menudo no es contiguo, y las direcciones virtuales solo se asignan a medida que las utiliza. El hecho de que su programa esté cargado en 0x80482c0 no significa que ya se haya asignado todo lo que hay entre allí y 0x0. –
Si está realmente interesado en aprender cómo se organiza su programa en la memoria bajo Linux, déjele una lectura: http://www.linuxforums.org/articles/understanding-elf-using-readelf-and-objdump_125.html –