Hardsoaaos
Что такое SOA vs AOS?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
Одни и те же данные, разный layout. AoS (Array of Structures) — каждое поле рядом; SoA (Structure of Arrays) — каждое поле отдельным массивом.
// AoS
struct Particle { float x, y, z, vx, vy, vz; };
Particle particles[N];
// SoA
struct Particles {
float x[N], y[N], z[N];
float vx[N], vy[N], vz[N];
} particles;
// SoA: обработка одного поля грузит только его (cache, SIMD)
for (int i = 0; i < N; ++i)
particles.x[i] += particles.vx[i] * dt;- SoA лучше для cache locality одного поля и SIMD vectorization (4 float в SSE register);
- SoA хуже для random access к одному объекту (6 cache lines);
- гибрид AoSoA — маленькие батчи AoS, батчи SoA.
Применяют в играх, симуляциях, ML; паттерн ECS построен на SoA.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.