Results

100,000 enemies, 1,000 times.

1Enemy

class Enemy {
    Vector3 m_position;    //   0
    ... 18 more fields ...
    Vector3 m_direction;   // 144
    ... 20 more fields ...
    float   m_velocity;    // 292
    ... 19 more fields ...
};  // 428 bytes, 60 fields
—baseline

2Enemy, fields grouped

class Enemy {
    Vector3 m_position;    //   0
    Vector3 m_direction;   //  12
    float   m_velocity;    //  24
    ... the other 57 ...   //  28
};  // 428 bytes, 60 fields
—faster

3EnemyMove

class EnemyMove {
    Vector3 m_position;    //   0
    Vector3 m_direction;   //  12
    float   m_velocity;    //  24
};  // 28 bytes
—faster

4EnemyData

class EnemyData {
    int      NumEnemies;
    Vector3* Position;
    Vector3* Direction;
    float*   Velocity;
    ... one array per field
};
—faster

ready