Вопросы с тегом «calling-convention»

8
Что такое __stdcall?
Я изучаю программирование на Win32, и его WinMainпрототип выглядит так: int WINAPI WinMain ( HINSTANCE instance, HINSTANCE prev_instance, PSTR cmd_line, int cmd_show ) Я был смущен относительно того, для чего был этот WINAPIидентификатор, и нашел: #define WINAPI __stdcall Что это делает? Я смущен тем, что что-то вообще есть после типа …

4
Почему Windows64 использует другое соглашение о вызовах, чем все другие операционные системы на x86-64?
У AMD есть спецификация ABI, в которой описывается соглашение о вызовах для использования на x86-64. Все операционные системы следуют ему, за исключением Windows, которая имеет собственное соглашение о вызовах x86-64. Зачем? Кто-нибудь знает технические, исторические или политические причины этой разницы, или это чисто синдром NIH? Я понимаю, что разные ОС …

7
Как именно работает стек вызовов?
Я пытаюсь глубже понять, как работают низкоуровневые операции языков программирования и особенно как они взаимодействуют с ОС / ЦП. Я, наверное, читал все ответы в каждой теме, связанной со стеком / кучей, здесь, на Stack Overflow, и все они великолепны. Но есть еще одна вещь, которую я еще не полностью …

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

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

1
Почему стековая память выделяется, когда она не используется?
Рассмотрим следующий пример: struct vector { int size() const; bool empty() const; }; bool vector::empty() const { return size() == 0; } Сгенерированный код сборки для vector::empty(по clang, с оптимизацией): 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.