¿Cuál es el uso de los sindicatos en C, en tiempo real donde lo usamos?

Ejemplo real:
Consulte http://linux.die.net/man/2/epoll…. Utiliza la unión epoll_data dentro de epoll_event. Porque tiene la intención de almacenar un entero sin signo de 32 bits, punteros, descriptor de archivo y un entero sin signo de 64 bits como datos en el evento epoll. Ahora, puede pedir que pueda usar datos enteros de 64 bits de inmediato y almacenar cualquier cosa menor que 64 bits. Bueno, en ese caso, debe realizar una conversión de texto que hará que el código sea feo.

Para detectar byte endianness del sistema:
Una máquina puede ser little endian o big endian. Un ejemplo popular de conversión de endianness es cuando se envían / ​​leen datos a / desde la red. En la red, los datos siempre están en big endian. Entonces, para convertir a big endian, uno debe saber que la máquina es little endian. Para un código portátil (como OpenSSL), esto se debe detectar en tiempo de ejecución. Aunque esto también se puede detectar en tiempo de compilación. Hay formas sin unión para verificar la endianidad también.

Intercambio de bytes: consulte http://stackoverflow.com/questio… por ejemplo.

Una buena aplicación de uniones en la que podría pensar es, cuando necesita una lista en la cual, cada elemento es un entero o un carácter, pero no ambos. En este caso, el uso de la variable de estructura no tiene sentido porque consumirá innecesariamente memoria adicional. Ahora, piense en mejores ejemplos en los que necesite SOLO una de las muchas alternativas.

Perdón por el cojo ejemplo 😐 Pero espero que entiendas la esencia.

En estructura, puedes pensar como una clase que, cuando se crea un objeto, consiste en todos los miembros de datos declarados en él.

decir clase A {

int a;

flotador b;

char c;

}

así que cuando creas un objeto di A obj = new A ();

ocupará 2 bytes para int +4 bytes para float + 1 byte para char, en total 7 bytes

donde, como en Union, ocupará los bytes del tipo de datos más alto, digamos que aquí es flotante, por lo que ocupará solo 4 bytes.