Запитання з тегом «calling-convention»

8
Що таке __stdcall?
Я дізнаюся про програмування Win32, і WinMainпрототип виглядає так: int WINAPI WinMain ( HINSTANCE instance, HINSTANCE prev_instance, PSTR cmd_line, int cmd_show ) Мене збентежило те, для чого потрібен цей WINAPIідентифікатор: #define WINAPI __stdcall Що це робить? Мене бентежить те, що взагалі щось має після повернення. Для чого __stdcall? Що це …

4
Чому Windows64 використовує інший режим виклику від усіх інших ОС на x86-64?
AMD має специфікацію ABI, яка описує конвенцію про виклики для використання на x86-64. Усі ОС дотримуються цього, за винятком Windows, яка має власну умову викликів x86-64. Чому? Хтось знає технічні, історичні чи політичні причини цієї різниці, чи це суто питання НІХсиндрому? Я розумію, що різні ОС можуть мати різні потреби …

7
Як саме працює стопка дзвінків?
Я намагаюся глибше зрозуміти, як працюють операції мов програмування низького рівня, і особливо, як вони взаємодіють з ОС / процесором. Я, мабуть, читав кожну відповідь у кожній нитці, що стосується стека / купи, тут на Stack Overflow. Але є ще одне, чого я ще не повністю зрозумів. Розглянемо цю функцію …

4
Чому T * може бути передано в регістр, але унікальний_ptr <T> не може?
Я дивлюся розмову Чендлера Каррута в CppCon 2019: Абстракції з нульовою вартістю немає в ній він дає приклад того , як він був здивований тим , як багато накладних витрат ви понесете при використанні std::unique_ptr&lt;int&gt;зловмисника int*; цей сегмент починається приблизно в момент часу 17:25. Ви можете ознайомитись з результатами компіляції …

3
__cdecl або __stdcall у Windows?
Зараз я розробляю бібліотеку C ++ для Windows, яка буде поширюватися як DLL. Моя мета - максимізувати бінарну сумісність; точніше, функції в моїй DLL повинні використовуватися з коду, скомпільованого з декількома версіями MSVC ++ та MinGW, без необхідності перекомпілювати DLL. Однак мене бентежить, який згодний дзвінок найкращий, cdeclабо stdcall. Іноді …

9
Яке значення та використання __stdcall?
Я багато що стикався __stdcallз цими днями. MSDN не дуже чітко пояснює, що це насправді означає, коли і навіщо його використовувати, якщо взагалі. Буду вдячний, якщо хтось надасть пояснення, бажано із прикладом чи двома.

1
Чому виділяється пам'ять стека, коли вона не використовується?
Розглянемо наступний приклад: struct vector { int size() const; bool empty() const; }; bool vector::empty() const { return size() == 0; } Створений код складання для vector::empty(за допомогою кланг, з оптимізаціями): push rax call vector::size() const test eax, eax sete al pop rcx ret Чому він виділяє стековий простір? Він …
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.