para lectura lectores lectoras lector etiqueta con antenas antena c unions

lectura - Diseño de memoria de la unión de miembros de diferentes tamaños?



tags en rfid (2)

typedef union epoll_data { void *ptr; int fd; __uint32_t u32; __uint64_t u64; } epoll_data_t;

Aquí int y __uint32_t son 4 bytes, mientras que los otros son 8 bytes.

Cuando configuramos fd en un int , ¿se encuentra en los primeros 4 bytes o en los últimos 4 bytes, o depende de la endianidad?

Se aprecia alguna razón.


Esto realmente depende de ELF-ABI para esa plataforma. Vea los ejemplos y las figuras que aparecen en la sección 3.1 en http://www.sco.com/developers/devspecs/abi386-4.pdf Muestra que no es necesario que comience con una dirección baja, si hay relleno debido a restricciones de alineación.


Se encuentra en los primeros 4 bytes. De la norma C99 §6.7.2.1 / 14:

El tamaño de un sindicato es suficiente para contener al mayor de sus miembros. El valor de, como máximo, uno de los miembros puede almacenarse en un objeto de unión en cualquier momento. Un puntero a un objeto de unión, adecuadamente convertido, apunta a cada uno de sus miembros (o si un miembro es un campo de bits, luego a la unidad en la que reside), y viceversa.

Esto implica que la dirección de todos los miembros de un sindicato es la misma.