Делает ли заполнение структуры C это использованием небезопасным?

Предположим, у меня есть структура, объединенная или нет:

    typedef struct {
        union {
            struct { float x, y, z; } xyz;
            struct { float r, g, b; } rgb;
            float xyz[3];
        } notAnonymous;
    } Vector3;

Я слышал, что некоторые компиляторы автоматически дополняют структуры для повышения производительности, создавая границы, выровненные по словам.

Предположительно такая синергия означает, что размер структуры не может быть гарантированно равным сумме размеров ее компонентных полей, и поэтому происходит изменение искажения и / или переполнения данных для массива xyzs в следующем :

inline Vector3 v3Make(float x, float y, float z) { Vector3 v = {x,y,z}; return v; }
float xyzs[6];
*(Vector3*)&xyzs[3] = v3Make(4.0f,5.0f,6.0f);
*(Vector3*)&xyzs[0] = v3Make(1.0f,2.0f,3.0f);

Верно?

5
задан timrau 16 August 2012 в 15:44
поделиться