cómo averiguar el tamaño de página de un procesador mediante el programa de C y malloc?

StackOverflow https://stackoverflow.com/questions/2460012

  •  20-09-2019
  •  | 
  •  

Pregunta

¿es posible averiguar el tamaño de página de un procesador mediante el programa de C y malloc? y no por el uso de sysconf () llamar?

¿Fue útil?

Solución

Si puede #include alguna cabecera del kernel de Linux, se puede encontrar la macro en PAGE_SIZE

<asm/page.h>

En cygwin (y tal vez DDK de Windows') i es en

<w32api/ddk/winddk.h>

Existen "trucos sucios" (muy, muy sucio!) A Calculat el tamaño de página en tiempo de ejecución. Todo no portables y totalmente dependiente del sistema.

Vamos a tener un poco de diversión!

Un truco posible de los sistemas pueden es crear un objeto de memoria compartida a sólo 1 byte de longitud. La llamada al sistema general redondea el tamaño hasta el tamaño de página del sistema. Bleach!

Otra, si está ejecutando en los sistemas de tipo Unix, y se atreve a interceptar la señal SIGSEGV, se podría tratar de explorar la memoria mediante la búsqueda de zonas válidas y ver qué potencia de 2 que se han redondeado. Uhm ...

Así que, ¿por qué sysctl no es bueno para usted?

Regards

Otros consejos

Norma C no tiene el concepto de un "tamaño de página" para que, en función de sus etiquetas, no. Puede haber un método específico de la implementación - ¿Tiene una particular aversión al uso de sysconf? Estoy asumiendo que lo mencionas, porque es una manera de conseguir realmente la información que necesita, en cuyo caso, por qué no usarlo?

Malloc no es probable que le diga lo que quiere saber. A pesar de que a menudo tiene los tamaños mínimos y consideraciones de alineación de lo que se destinará, no son necesariamente lo mismo que (o relacionados con en cualquier forma definida) el tamaño de página. ¿Está dispuesto a buscar en otra parte? ¿Qué ambiente se ejecuta?

(que no es realmente la respuesta, pero no puedo añadirlo en sección de comentarios, por lo que responder aquí: sólo algunos de sus resultados de mi investigación)

(como ya he dicho antes en mi pregunta original, mi interés era puramente académico y yo sólo necesitaba varios métodos para calcular el tamaño de página y verificar que todos ellos están de acuerdo con el mismo valor)

para averiguar el tamaño de página del sistema / microprocesador sin utilizar sysconf es sólo por diversión! Esto es lo que he intentado hasta ahora:

-get el tamaño de página real utilizando sysconf (_SC_PAGE_SIZE):. Tengo en este equipo que es 0x1000 4K (su procesador Intel 386 con Linux de 32 bits cargado en ella Mis próximos pasos será verificar este valor con varios otros maneras (si puedo encontrar a los fiable).

-entonces Asigné 1 byte de la memoria

-en un bucle, usando un contador de offset, I escribió más allá de memoria asignada 1 byte. funcionó bien hasta 0x19a8 que está más allá del tamaño de 1 página y justo por debajo de la talla 2 página!

-SEGV sucede en algún lugar entre 1página a 2página tamaño, hacia el final. Esta es repetible.

-así este método no pudo encontrar el tamaño de la página de forma fiable.

Es por eso hice esta pregunta. ¿Hay un truco (con excepción de usar información directa disponible en el kernel) para averiguar el tamaño de página? Incluso estoy dispuesto a renunciar a malloc (que consiste en utilizar algún otro truco).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top