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);