Contribución de la estructura al tamaño de letra
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?
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
a veces, ver: http://en.wikipedia.org/wiki/Sizeof