Estoy asumiendo (posiblemente erróneamente) que depende de la implementación y/o del sistema. ¿Hay algo como INT_MAX o CHAR_BIT que me diga el tamaño de un puntero en la memoria?¿Cuánta memoria usa un puntero C++?
Respuesta
Un puntero apunta a un lugar en la memoria, por lo que serían 32 bits en un sistema de 32 bits y 64 bits en el sistema de 64 bits.
tamaño de punteros también es irrelevante para el tipo que apunta a, y se puede medir por sizeof(anyType*)
UPD
La manera en que yo respondí esto fue sugerido por la forma en que se hizo la pregunta (que sugirió una respuesta simple). Sí, acepto que en casos como los punteros a la tabla de métodos virtuales, el tamaño del puntero será diferente, y de acuerdo con this article, variará en diferentes plataformas e incluso en diferentes compiladores dentro de la misma plataforma. En mi caso, por ejemplo (x64 ubuntu, GCC 4.6.3) es igual a 16 bytes.
Por supuesto, qué sencillo, pero tan cierto. –
incorrecto En el sistema operativo de 64 bits, aún puede tener su programa compilado en modo de 32 bits. –
Cout'ed 'sizeof (int *)' y la respuesta fue '4'. ¿Eso significa 4 bytes? (algo interesante porque esta es una máquina de 64 bits). Estoy compilando con Visual C++. – HorseloverFat
¿Funcionaría sizeof(int*)
? O lo que sea que estás destinado a verificar?
El tamaño del puntero depende de su sistema operativo (en realidad, la cantidad de bits del sistema operativo), intente con la función sizeof (tipo *).
incorrecto En el sistema operativo de 64 bits, aún puede tener su programa compilado en modo de 32 bits. –
@ icando ... ¿el tamaño del puntero depende del modo que está compilando? dar ejemplo – Tejendra
@Tejendra - por ejemplo, Visual Studio tiene 2 modos - Win32 - para 32 bits, y uno, para x64 (se olvidó su nombre) –
Definitivamente depende del sistema. Por lo general, un puntero de datos simple se puede almacenar en una variable size_t. En C++ 11 hay macro SIZE_MAX que es el valor máximo para size_t. En C++ 11 también puede usar std::intptr_t.
Si tiene en cuenta los indicadores de funciones de los miembros, las cosas se complican aún más. Depende entre otras cosas si la clase hereda de uno o más padres, si expone funciones virtuales y, por supuesto, sobre la implementación.
Here puede encontrar un artículo detallado acerca de los punteros de función de miembro, junto con algunos ejemplos para algunos compiladores.
La respuesta para un caso simple como int*
es directa y se da en otras respuestas.
Pero tenga en cuenta que los punteros miembros de objetos que usan herencia múltiple pueden contener varios (WORDs/DWORDs/QWORD), en el peor de los casos hasta 5 (cinco).
buen artículo sobre esto: http://www.codeproject.com/Articles/7150/Member-Function-Pointers-and-the-Fastest-Possible
¿Cómo puede afectar el tamaño de un puntero a la herencia múltiple? – EJP
No es así. Como está escrito, la respuesta es simplemente incorrecta. Sospecho que el póster estaba pensando en los indicadores para los miembros, que pueden tener un tamaño claramente diferente al de otros indicadores. (Por supuesto, no hay ningún requisito de que todos los punteros tengan el mismo tamaño, incluso en C, y he trabajado en máquinas donde 'sizeof (int *)! = Sizeof (char *)', o donde los punteros a las funciones tienen una diferente tamaño que punteros a los datos.) –
Actualmente no puedo escribir un mensaje más detallado. En unas pocas horas actualizaré mi publicación. –
#include<stdio.h>
#include<conio.h>
void main()
{
printf(" %d",sizeof(int *));
printf(" %d",sizeof(char *));
printf(" %d",sizeof(float *));
printf(" %d",sizeof(double *));
getch();
}
usó este programa y muestra "2" como salida para todas las instrucciones printf. Entonces, si no estoy equivocado, un puntero toma 2 bytes ... –
... solo en la computadora específica y supuestamente bastante antigua que usaste. No existe una regla sobre el tamaño, aunque en la mayoría de las computadoras contemporáneas, sin duda será diferente de 2. –
- 1. ¿Cuánta memoria usa el puntero nulo?
- 2. ¿Cuánta memoria usa una Hashtable?
- 3. ¿Cuánta memoria usa numpy ndarray?
- 4. ¿Determinar cuánta memoria usa una clase?
- 5. ¿Cómo sabe MemoryCache cuánta memoria usa?
- 6. ¿Cuánta memoria usa realmente mi aplicación de Windows?
- 7. ¿Cuánta memoria tiene una constante en C?
- 8. ¿Hay alguna manera de ver cuánta memoria usa una variable?
- 9. ¿Cómo sabe free() cuánta memoria desasignar?
- 10. ¿Cuánta memoria debería poder asignar?
- 11. Cuánta memoria está bloqueada en un proceso
- 12. cuánta memoria toma un hilo en java
- 13. Malloc -> ¿cuánta memoria ha sido asignada?
- 14. ¿Cuánta memoria podría utilizar vm
- 15. zlib, deflate: ¿Cuánta memoria asignar?
- 16. Averiguar cuánta memoria está usando un objeto en Python
- 17. ¿Cuánta memoria usa un objeto Java cuando todos sus miembros son nulos?
- 18. En Objective-C, ¿cómo sabe + alloc cuánta memoria asignar?
- 19. Cómo saber cuánta gente usa mi software
- 20. ¿Cuánta memoria ocupará un valor nulo en un DB?
- 21. ¿Cuánta memoria tiene antes de ser grosera?
- 22. ¿Cuánta memoria intermedia tienen NetworkStream y TcpClient?
- 23. ¿Cuánta memoria debe asignar 'managed_shared_memory'? (Impulso)
- 24. Liberando un puntero de la memoria en C#
- 25. ¿Cuánta memoria tiene mi hilo de Java?
- 26. Android: ¿cómo verificar cuánta memoria queda?
- 27. ¿Puede recordarme Memcache cuánta memoria está usando?
- 28. C++ borrar un puntero a un puntero
- 29. ¿Cuánta sobrecarga de rendimiento de base de datos usa LINQ?
- 30. C# do const fields usa menos memoria?
usted debe tener cuidado con los punteros de función miembro, ya que pueden tener distintos tamaños, a diferencia de los regulares. Ver http://www.codeproject.com/Articles/7150/Member-Function-Pointers-and-the-Fastest-Possible para más detalles sangrientos. –