una tiene tamaño palabra informatica hay cuantos cantidad bytes c processor word-size

tiene - Determinar el tamaño de palabra de mi procesador



double word (7)

un int debería ser una palabra, ¿verdad?

Como yo lo entiendo, eso depende del modelo de tamaño de datos. Para obtener una explicación de los sistemas UNIX, 64 bits y la neutralidad del tamaño de los datos . Por ejemplo, Linux de 32 bits es ILP32 y Linux de 64 bits es LP64. No estoy seguro de la diferencia entre los sistemas y versiones de Windows, aparte de que creo que todos los sistemas de Windows de 32 bits son ILP32.

¿Cómo puedo determinar el tamaño de palabra de mi CPU?

Eso depende. ¿Qué versión del estándar C estás asumiendo? ¿De qué plataformas estamos hablando? ¿Es esta una determinación de compilación o tiempo de ejecución que estás tratando de hacer?

El archivo de encabezado C <limits.h> puede definir WORD_BIT y / o __WORDSIZE .

¿Cómo puedo determinar el tamaño de palabra de mi CPU? Si entiendo correctamente, un int debería ser una palabra, ¿verdad? No estoy seguro si estoy en lo correcto.

Entonces, ¿debería bastar con imprimir sizeof(int) para determinar el tamaño de palabra de mi procesador?


Cree un programa que realice algún tipo de operación de enteros muchas veces, como una versión entera del algoritmo SAXPY. Ejecútelo para diferentes tamaños de palabra, de 8 a 64 bits (es decir, de char a long long ).

Mida el tiempo que pasa cada versión mientras ejecuta el algoritmo. Si hay una versión específica que dura notablemente menos que las otras, el tamaño de palabra utilizado para esa versión es probablemente el tamaño de palabra nativo de su computadora. Por otro lado, si hay varias versiones que duran más o menos al mismo tiempo, elija la que tenga el tamaño de palabra más alto.

Tenga en cuenta que incluso con esta técnica puede obtener datos falsos: su punto de referencia, compilado utilizando Turbo C y ejecutándose en un procesador 80386 a través de DOS informará que el tamaño de la palabra es de 16 bits, solo porque el compilador no usa los registros de 32 bits. para realizar aritmetic entero, pero llama a funciones internas que hacen la versión de 32 bits de cada operación aritmética.


Cualquiera que sea la razón para saber el tamaño del procesador, no importa.

El tamaño del procesador es la cantidad de fecha en la que la Unidad lógica de arthematic (ALU) de One CPU Core puede trabajar en un solo punto de tiempo. La ALU de los núcleos de una CPU se registrará en el acumulador en cualquier momento. Por lo tanto, el tamaño de una CPU en bits es el tamaño del Registro de acumulador en bits.

Puede encontrar el tamaño del acumulador en la hoja de datos del procesador o escribiendo un pequeño programa en lenguaje ensamblador.

Tenga en cuenta que el tamaño efectivo utilizable del Registro de acumuladores puede cambiar en algunos procesadores (como ARM) según el modo de operaciones (modos Pulgar y ARM). Eso significa que el tamaño del procesador también cambiará según el modo para esos procesadores.

Es común en muchas arquitecturas tener un tamaño de puntero de dirección virtual y un tamaño de entero igual al tamaño del acumulador. Es solo para aprovechar el Registro de acumuladores en diferentes operaciones del procesador, pero no es una regla difícil.


En resumen: no hay buen camino. La idea original detrás de los tipos de datos de C era que int sería el tipo de entero más rápido (nativo), durante mucho tiempo el más grande, etc.

Luego vinieron los sistemas operativos que se originaron en una CPU y luego se trasladaron a diferentes CPU cuyo tamaño de palabra nativa era diferente. Para mantener la compatibilidad del código fuente, algunos de los sistemas operativos rompieron con esa definición y mantuvieron los tipos de datos en sus tamaños anteriores, y agregaron nuevos, no estándar.

Dicho esto, dependiendo de lo que realmente necesite, puede encontrar algunos tipos de datos útiles en stdint.h , o macros específicas del compilador o específicas de la plataforma para varios propósitos.


Para usar en tiempo de compilación: sizeof(void*)


Su suposición sobre sizeof (int) es falsa; mira this

Dado que debe conocer el procesador, el sistema operativo y el compilador en el momento de la compilación, el tamaño de la palabra se puede inferir utilizando macros de arquitectura / sistema operativo / compilador predefinidas proporcionadas por el compilador.

Sin embargo, mientras que en los procesadores RISC más simples y simples, el tamaño de la palabra, el ancho del bus, el tamaño del registro y la organización de la memoria a menudo son un solo valor, esto puede no ser válido para arquitecturas CISC y DSP más complejas con varios tamaños para registros de punto flotante, acumuladores, ancho de bus , ancho de caché, registros de propósito general, etc.

Por supuesto, surge la pregunta de por qué podría necesitar saber esto. En general, usaría el tipo apropiado para la aplicación y confiaría en el compilador para proporcionar cualquier optimización. Si lo que cree que necesita esta información es optimización, entonces probablemente estaría mejor usando los tipos ''rápidos'' de C99 . Si necesita optimizar un algoritmo específico, implementarlo para varios tipos y perfilarlo.


sizeof (int) no es siempre el tamaño de "palabra" de su CPU. La pregunta más importante aquí es por qué quiere saber el tamaño de palabra ... ¿está tratando de hacer algún tipo de optimización específica de tiempo de ejecución y CPU?

Dicho esto, en Windows con procesadores Intel, el tamaño nominal de la palabra será de 32 o 64 bits y puede resolverlo fácilmente:

  • Si su programa está compilado para 32 bits, entonces el tamaño nominal de la palabra es de 32 bits.
  • Si ha compilado un programa de 64 bits, entonces el tamaño nominal de la palabra es de 64 bits.

Esta respuesta suena trivial, pero es verdadera para el primer orden. Pero hay algunas sutilezas importantes. Aunque los registros x86 en un procesador Intel o AMD moderno tienen 64 bits de ancho; solo puede (fácilmente) usar sus anchos de 32 bits en programas de 32 bits, incluso aunque esté ejecutando un sistema operativo de 64 bits. Esto también será cierto en Linux y OSX.

Además, en la mayoría de las CPU modernas, el ancho del bus de datos es más ancho que los registros ALU estándar (EAX, EBX, ECX, etc.). Este ancho de bus puede variar, algunos sistemas tienen buses de 128 bits o incluso de 192 bits de ancho.

Si le preocupa el rendimiento, también necesita comprender cómo funcionan los cachés de datos L1 y L2. Tenga en cuenta que algunas CPU modernas tienen un caché L3. Cachés que incluyen una unidad llamada Write Buffer