Hardcalling-convention

Что такое calling convention?

1Постановка

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

2Решение

Calling convention — соглашение о передаче аргументов, возврате результата, очистке стека, сохраняемых регистрах. На x64 в основном две — System V AMD64 (Linux/macOS) и Microsoft x64 (Windows).

System V AMD64 (Linux/macOS):
  int args   → rdi, rsi, rdx, rcx, r8, r9  (первые 6)
  float args → xmm0..xmm7                  (первые 8)
  остальное  → стек (справа налево)
  return     → rax (int) / xmm0 (float)

Microsoft x64 (Windows):
  первые 4   → rcx, rdx, r8, r9 (+ shadow space 32 байта)
  остальное  → стек

На x86 было больше вариантов (__cdecl, __stdcall, __fastcall, __thiscall). В современном C++ явно convention не пишут (дефолт платформы), но для interop с OS API, DLL, asm — критично. Несовпадение convention → corrupt stack, crash.

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

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

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