Sobes.tech
Middle+

Дар бораи калимаи калидии _fastcall, мақсад ва хусусиятҳои истифодаи он гап занед.

sobes.tech AI

Ҷавоб аз AI

fastcall — ин шеваи даъвати (calling convention) дар C/C++, ки муайян мекунад, чӣ гуна аргументаҳои функсия гузаронида мешаванд ва чӣ гуна арзиш байни даъваткунанда ва даъватшуда баргардонида мешавад. Ҳадафи асосии fastcall беҳтар кардани суръати даъвати функсия тавассути интиқоли қисм ё ҳамаи аргументаҳо ба қайддони процессор, на тавассути стекист.

Хусусиятҳои истифода:

  • Гузаронидани аргументаҳо: Нахуст чанд аргумент (мебо, 2-4, вобаста ба архитектура ва компилятор) ба қайддони умумӣ гузаронида мешаванд. Аргументҳои боқимонда тавассути стек гузаронида мешаванд.
  • Қайддониҳо: Қайддониҳои махсус, вобаста ба архитектура ва компилятор (масалан, дар x86, метавонанд ECX, EDX бошанд).
  • Стек: Агар аргументҳо бештар аз он ки дар қайддониҳо ҷойгир мешаванд, боқимондаҳо аз рост ба чап дар стек ҷойгир мешаванд.
  • Тозакунии стек: Тозакунии стек пас аз даъвати функсия аз ҷониби функсияи даъватшуда (callee-cleanup) анҷом дода мешавад.
  • Навъҳои додаҳо: Одатан, дар қайддониҳо навъҳои ададии умумӣ ва ишораҳо гузаронида мешаванд. Структураҳо ва объектҳои калон одатан тавассути стек гузаронида мешаванд.
  • Масофат: fastcall стандартии шеваи даъват нест. Дастгирии он ва рафтор аз ҷониби компилятор (масалан, MSVC, GCC) вобаста аст. Маъзур аст, ки даъватҳоро бо шеваҳои гуногун бе эълони равшан омехта накунед.
  • Барнома: Барои оптимизатсияи функсияҳои зуд-зуд даъватшаванда бо камтар аргументҳо истифода мешавад.
  • Эълон: Пеш аз навъи баргардонии функсия эълон карда мешавад.

Масалан:

// Эълон кардани функсия бо fastcall (барои MSVC)
int __fastcall AddNumbers(int a, int b, int c);

// Иҷрои функсия
int __fastcall AddNumbers(int a, int b, int c) {
    // a ва b метавонанд дар қайддониҳо гузошта шаванд (масалан, ECX, EDX)
    // c дар стек гузошта мешавад
    return a + b + c;
}

// Даъвати функсия
int result = AddNumbers(1, 2, 3);