Pregunta

Me pregunto por qué los siguientes dos tipos

struct {
    double re[2];
};

y

double re[2];

tiene el mismo tamaño en C? ¿Estructura no agrega un poco de sobrecarga de tamaño?

¿Fue útil?

Solución

No, simplemente compone todos los elementos en un elemento de nivel superior cuyo tamaño es simplemente el tamaño de los elementos individuales sumados (más algo de relleno dependiendo de las reglas de alineación, pero eso está fuera del alcance de esta pregunta).

Otros consejos

No si puede ayudarlo, no. C evita la sobrecarga como la peste. Y específicamente, evita la sobrecarga en este contexto.

Si utilizó una estructura diferente, puede ver una diferencia:

struct space_filled
{
    char       part0;
    double     part1;
};

Si su máquina requiere que double esté alineado en un límite de 8 bytes (y sizeof (double) == 8 , que es normal pero no es obligatorio por el estándar ), encontrará que la estructura ocupa 16 bytes.

No, la estructura no tiene que agregar nada. A diferencia de Java o .NET, donde las clases (y estructuras) tienen muchas otras responsabilidades, en C y C ++, son simplemente contenedores utilizados para contener una cantidad de miembros de datos. En C ++, es posible que tengan que almacenar una tabla virtual para resolver las llamadas a funciones virtuales, si existen, pero en general, no, una estructura en sí misma no tiene sobrecarga.

La única excepción es esta:

typedef struct {} empty;
assert(sizeof(empty) > 0);

El tamaño de una estructura vacía no será cero. Una estructura debe tener algún tamaño distinto de cero ya que cada objeto debe tener una dirección única. (De lo contrario, no podría crear una matriz de estas estructuras)

No. Struct no agrega ningún tamaño, ni tiene ninguna sobrecarga en la C. compilada

Es una capa de sintaxis que requiere trabajo adicional por parte del compilador, pero no tiene sobrecarga en tiempo de ejecución.

C es un extremadamente "desnudo" idioma, lo que significa que no hay nada a menos que sea necesario. Entonces pregúntese, "¿Qué gastos generales requiere una estructura?", Y no encontrará ninguno.

No, no lo hace.

Ese es uno de los puntos positivos de las estructuras (por qué fueron tan útiles en la programación TCP / IP de la vieja escuela).

Es una buena forma de representar el diseño de memoria / búfer.

no el tipo de estructura en C simplemente distribuye secuencialmente los miembros en la memoria

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