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