Mediumalignment

Чем alignas/alignof полезны?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

alignas(N) задаёт требование к выравниванию переменной/типа (адрес кратен N). alignof(T) возвращает требуемое выравнивание. Важно для SIMD, atomic operations, hardware requirements и избегания false sharing.

// SIMD: SSE требует 16 байт, AVX — 32
alignas(32) float vec[8];   // безопасно для AVX-операций

// False sharing avoidance
struct PerThread {
    alignas(64) int counter;  // каждый поток — своя cacheline
};

static_assert(alignof(int) == 4);
static_assert(alignof(double) == 8);
  • На ARM/SSE unaligned access может быть crash’ем, на x86 — медленнее;
  • lock-free atomic требует выравнивания по размеру;

new учитывает alignof(T) с C++17.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.