¿Hay una forma portátil de detectar (programáticamente) el tamaño de página de memoria utilizando el código C o C++?detectando el tamaño de página de memoria
Respuesta
Dado que Boost
es una biblioteca bastante portátil, puede usar la función mapped_region::get_page_size()
para recuperar el tamaño de la página de memoria.
En cuanto a C++ Standard no ofrece tal posibilidad.
C no sabe nada acerca de las páginas de memoria. En los sistemas posix puede usar long pagesize = sysconf(_SC_PAGE_SIZE);
Es completamente dependiente de la plataforma qué rangos de direcciones se asignan a qué tamaños de página. Además, el tamaño de página no abarca todo el sistema. Puede asignar memoria desde diferentes regiones de tamaño de página de acuerdo con el caso de uso. E incluso puede tener plataformas sin administración de memoria virtual.
Por lo tanto, el código que maneja este tema debe ser específico de la plataforma.
Desconecta entre tu explicación y la conclusión; aplicar la misma lógica nos diría que determinar el tamaño de un puntero es específico de la plataforma. – kfsone
Creo que esta función ayuda.
[DllImport ("kernel32.dll")] public static extern void GetSystemInfo ([MarshalAs (UnmanagedType.Struct)] ref SYSTEM_INFO lpSystemInfo);
La pregunta dice "C", "C++" y "portátil" y además de eso, ni siquiera describiste cómo llegar a un tamaño de página. – kfsone
Sí, esto es específico de la plataforma. En Linux hay sysconf(_SC_PAGESIZE)
, que también parece ser POSIX. Una biblioteca C típica implementa esto usando el vector auxiliar. Si por alguna razón usted no tiene una biblioteca C o el vector auxiliar que podría determinar el tamaño de la página como esta:
size_t get_page_size(void)
{
size_t n;
char *p;
int u;
for (n = 1; n; n *= 2) {
p = mmap(0, n * 2, PROT_NONE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
if (p == MAP_FAILED)
return -1;
u = munmap(p + n, n);
munmap(p, n * 2);
if (!u)
return n;
}
return -1;
}
Eso también es POSIX, creo. Se basa en que haya algo de memoria libre, pero solo necesita dos páginas consecutivas. Puede ser útil en algunas circunstancias (extrañas).
En todos los sistemas operativos, no.
En los sistemas Linux:
#include <unistd.h>
long sz = sysconf (_SC_PAGESIZE);
- 1. Detectando el tamaño del dedo de un usuario en touch
- 2. ¿Es posible cambiar el tamaño de página de la memoria virtual?
- 3. Detectando el acceso a la memoria a un proceso
- 4. cambiar el tamaño de la página
- 5. Detectando si el navegador está navegando a otra página
- 6. ¿Cómo encontrar el tamaño de la memoria virtual y el tamaño de la memoria caché de un sistema Linux?
- 7. Tamaño de página: Firefox agregar
- 8. TCPDF Tamaño de página personalizado
- 9. Detectando el desplazamiento de UITableView
- 10. Permitido el tamaño de la memoria de 268435456 bytes agotado
- 11. ¿Cuál es el tamaño de mi memoria de textura CUDA?
- 12. PDFBox A5 ajuste de tamaño de página
- 13. ¿Cómo calculo el tamaño de la tabla de página?
- 14. Uso de GhostScript para obtener el tamaño de página
- 15. PHP GD Tamaño de memoria permitido agotado
- 16. Obteniendo el tamaño en memoria de un objeto en PHP?
- 17. ¿Por qué "Se ha agotado el tamaño de memoria permitido"?
- 18. Determinar el tamaño de la memoria asignada dinámicamente en C
- 19. cómo calcular el tamaño de la memoria apuntada del puntero?
- 20. Windows: cambiar el tamaño de la memoria compartida
- 21. WPF: ¿obtiene el tamaño de UIElement en la memoria?
- 22. Obtener el tamaño de la memoria del sistema operativo Java
- 23. ¿Cómo obtener el tamaño de la memoria del sistema disponible?
- 24. ¿Cómo podemos encontrar el TAMAÑO DE MEMORIA del puntero de memoria dado?
- 25. Detectando el tipo de interrupción de iPhone
- 26. Determinar el tamaño del estado de visualización de la página ASP.NET antes de publicar la página
- 27. Tamaño de página personalizado en Wicked_PDF
- 28. CSS - Aumentar página Tamaño de fuente
- 29. wicked_pdf y emisión tamaño de página wkhtmltopdf
- 30. Safari 6 Tamaño de página total (kb)
No, no lo hay. –
No, no porque C y C++ existen también para plataformas sin memoria virtual. – zvrba