sintaxis array c byte sizeof word-size

array - ¿Sizeof devuelve el número de bytes o el número de octetos de un tipo en C?



sizeof string (4)

Desde mi propia experiencia, trabajando en microcontroladores integrados con compiladores ''C'' exóticos, he visto:

sizeof( uint8 )

retorno 1

sizeof( uint16 )

retorno 1

sizeof( uint32 )

retorno 2

Claramente, estaba tratando con una máquina donde la entidad direccionable más pequeña era de 16 bits, por lo que el tamaño no cumple con C89 o C99.

Yo diría que en los sistemas que cumplen con la norma C89 y C99, la respuesta aceptada es correcta. Desafortunadamente, un compilador "C" todavía puede llamarse un compilador "C", incluso si no cumple con un estándar de 25 años. Espero que esta respuesta ayude a poner las cosas en perspectiva, dados los sistemas más exóticos.

Simplemente coloque en C y variantes (a diferencia de wuss java con su máquina virtual) el tamaño de los tipos primitivos en diferentes objetivos puede variar mucho, y realmente no hay garantía a menos que use los tipos de ancho fijo definidos en stdint.h , e incluso entonces Su implementación tiene que apoyarlos.

De todos modos, hipotéticamente (porque en la mayoría de las máquinas modernas un byte es un octeto, para propósitos de red asumo (ASCII)) ¿sizeof devuelve el tamaño de un tipo de datos en bytes o en octetos?


Respuesta: sizeof devuelve el tamaño del tipo en bytes .

Ejemplo: sizeof(char) tiene una garantía del 100% de ser 1 , pero esto no significa que sea un octeto (8 bits).

Probado por el estándar:

en 6.5.3.4, punto 2:

El operador sizeof produce el tamaño (en bytes) de su operando , que puede ser una expresión o el nombre entre paréntesis de un tipo. El tamaño se determina a partir del tipo de operando. El resultado es un entero. Si el tipo del operando es un tipo de matriz de longitud variable, se evalúa el operando; de lo contrario, el operando no se evalúa y el resultado es una constante entera.

...

Cuando se aplica a un operando que tiene el tipo char, unsigned char, o signed char, (o una versión calificada del mismo), el resultado es 1 . Cuando se aplica a un operando que tiene un tipo de matriz, el resultado es el número total de bytes en la matriz) Cuando se aplica a un operando que tiene estructura o tipo de unión, el resultado es el número total de bytes en ese objeto, incluyendo interno y relleno trasero.

Asimismo, en la sección 3.6, punto 3:

Un byte se compone de una secuencia contigua de bits, cuyo número está definido por la implementación


sizeof da el tamaño en bytes. Sin embargo, tenga en cuenta que "byte" es un término técnico en el estándar C, y se define de manera tal que sizeof(char) == 1 .


sizeof siempre devuelve tamaño como el número de bytes. Pero según wikipedia :

En los lenguajes de programación C y C ++, el operador unario sizeof se utiliza para calcular el tamaño de cualquier tipo de datos, medido en el número de bytes necesarios para representar el tipo. Un byte en este contexto es lo mismo que un carácter sin signo, y puede tener más de 8 bits, aunque eso no es común .