Suponiendo que tengo una estructura como la siguiente:¿Puede el relleno de struct ser utilizado con seguridad por el código de usuario?
struct Struct {
char Char;
int Int;
};
y sizeof(int)
es mayor que uno y el compilador añade relleno para la variable Char
miembro - es el código generado por el compilador permite cambiar los valores de los bytes de relleno ?
quiero decir si uso la aritmética de punteros y escribir algunos datos en los bytes de relleno que rodean la variable Char
miembro y posteriormente hacer variable.Char =
asignación es posible que el código generado por el compilador también se sobreponen a algunos de los bytes de relleno?
@nobugz, creo que es una pregunta válida. Imagen que tiene memset una estructura en 0 antes de establecer los valores, que puede usar memcmp más tarde para comparar dos estructuras, pero solo si el compilador no toca los bytes de relleno. – quinmars
No te metas con el relleno, 'memset' o' memcpy' con clases y estructuras. El enfoque ** más seguro ** y ** más robusto ** es implementar métodos para leer y escribir en un búfer empaquetado (por ejemplo, 'unsigned char []'). El seguro vale el espacio y el tiempo extra ejecutable. –
@Thomas Matthews, creo que me malentendió. Estaba hablando de comparar dos estructuras, consulte http://stackoverflow.com/questions/141720/how-do-you-compare-structs-for-equality-in-c/141791#141791 – quinmars