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 подскажет развёрнутый ответ в реальном времени.