FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Saber cuanto ocupa un objeto en memoria
Buenos días,
hay alguna forma de saber lo que ocupa un objeto creado en memoria? Me explico. Si tengo este código:
Da igual cuantos objetos añada a la Lista del objeto a que siempre me va a devolver 16 bytes. Que es la suma de 4 bytes del puntero a la clase, + 4 del String, +4 del entero + 4 del puntero a la objectlist. Pero esa objectlist e incluso el string pueden variar en tamaño. Como puedo saber realmente lo q ocupa en un momento dado???? |
#2
|
|||
|
|||
hola, echale un vistazo a la funcion sizeof (aunque ahora mirando la ayuda no estoy seguro si te dara el tamaño del objeto o del puntero...). Saludos.
|
#3
|
|||
|
|||
Está complicado...
no creo que eso sea tarea sencilla. Es muy necesario? hay alguna que otra estructura interna en los objetos como ser la VMT.
Necesitas saber la instancia o los datos de la instancia? De ser esto último, las propiedades "published" y "Stored" es suficiente? si es así, bastará con recorrer el objeto Rtti mediante... también debes recorrer a todo lo persistente que cuelgue de él. |
#4
|
||||
|
||||
Hola AFilth.
Te hago las mismas preguntas que Poyo, solicitándote que nos plantees cuál es el propósito de conocer el tamaño de toda la rama de datos (o aclares si es otra cosa lo que buscas). ¿Algo que ver con el almacenamiento de los mismos en algún medio? Danos más detalles de tu caso, por favor. Secundando el comentario de Poyo, en la RTTI muchas clases tienen algo llamado "tabla de inicialización" (initialization table), en el desplazamiento negativo vmtInitTable de su VMT (ver unidad System.pas). Su existencia permite que los objetos automáticamente liberen campos ("variables" de datos) de tipos que usan contadores de referencia, cuando las instancias son destruidas. Gracias a esa información es posible conocer más sobre la memoria que ocupan ciertos campos, como los de tipo String, pero no puedes conocer del todo las ramificaciones de punteros como los campos de tipo objeto (a menos que éstos estén representados por propiedades publicadas). Sin adentrarnos más en el lado "tenebroso" del compilador, te invito a dar algo más de contexto sobre tu caso. Saludos. Al González. |
#5
|
||||
|
||||
Se me ocurre una idea, serviría escribir todo el contenido del objeto a un TStream y luego obtener el tamaño de este Stream?
Saludos. |
#6
|
||||
|
||||
Cita:
Saludos. |
#7
|
|||
|
|||
Cita:
para saber cuanto consume de memoria su programa, al hacer varias operaciones del mismo tipo que nos pone de ejemplo. y hacer un bien programa que consuma pocos recursos sea eficiente. ¿yo tambien me pregunto como medir la memoria que consume mis programas? |
#8
|
||||
|
||||
Es posible, pero AFilth todavía no responde a las dudas que nos surgieron de su comentario inicial.
|
#9
|
|||
|
|||
Al, si bien esto se está tornando "Off topic", he leido tu mensaje y me puse de inmediato a ello... curiosidad, vio?
Así que decidí habrir otro nuevo hilo para que este no se vaya por las ramas: http://www.clubdelphi.com/foros/showthread.php?p=336279 |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Duda para saber que objeto esta em memoria | Paulao | Varios | 0 | 23-08-2008 15:16:44 |
¿Cuanto debe saber un informático? | Delphius | Debates | 22 | 07-12-2005 14:11:38 |
ADO- Como puedo saber cuanto registros borre o actualice | mgaray | Conexión con bases de datos | 4 | 11-05-2005 21:28:47 |
mi programa ocupa DEMASIADA memoria | unreal4u | Varios | 2 | 24-04-2005 04:42:05 |
El saber no ocupa lugar !!!!! | LucasArgentino | SQL | 2 | 13-11-2003 16:35:03 |
|