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

Соглашение о вызовах относится к тому, как функция передает параметры вызываемой функции и получает от нее возвращаемое значение.
8

Что такое __stdcall?

Я изучаю программирование Win32, а прототип WinMain выглядит так: int WINAPI WinMain ( HINSTANCE instance, HINSTANCE prev_instance, PSTR cmd_line, int cmd_show ) Я был в замешательстве относительно того, для чего был найден и найден этот идентифи...
18 нояб. '08 в 2:15
6

Как работает callstack?

Я пытаюсь получить более глубокое понимание того, как работают низкоуровневые операции языков программирования, и особенно то, как они взаимодействуют с ОС/ЦП. Я, наверное, прочитал каждый ответ в каждом потоке, связанном с стеком/кучей, на Stack Ove...
01 июн. '14 в 15:27
5

Почему Windows64 использует другое соглашение о вызове от всех других ОС на x86-64?

AMD имеет спецификацию ABI, которая описывает соглашение о вызове для использования на x86-64. Все ОС следуют за ним, за исключением Windows, у которой есть собственное соглашение о вызове x86-64. Почему? Кто-нибудь знает технические, исторические и...
13 дек. '10 в 13:45
9

В чем смысл и использование __stdcall?

В наши дни я много сталкивался с __stdcall. MSDN не очень четко объясняет, что это на самом деле означает, когда и почему его следует использовать, если оно вообще есть. Буду признателен, если кто-нибудь даст объяснение, желательно с примером или д...
20 авг. '09 в 14:03
4

Почему T * может быть передано в регистр, а unique_ptr<t> не может?

Я смотрю выступление Чендлера Каррута в CppCon 2019: Нет абстракций с нулевой стоимостью в нем он приводит пример того, как он был удивлен тем, сколько накладных расходов вы понесли, используя std::unique_ptr<int> над int*; этот сегмент начин...
11 окт. '19 в 10:19
3

__cdecl или __stdcall в Windows?

В настоящее время я разрабатываю библиотеку С++ для Windows, которая будет распространяться как DLL. Моя цель - максимизировать двоичную совместимость; более точно, функции в моей DLL должны использоваться из кода, скомпилированного с несколькими вер...
28 июн. '11 в 18:07
5

Какие регистры нужно сохранить в соглашении о вызовах ARM C?

Прошло довольно много времени с тех пор, как я последний раз собирал кодовые манипуляторы, и я немного заржавел в деталях. Если я вызываю функцию C из руки, мне остается только беспокоиться о сохранении r0-r3 и lr, верно? Если функция C использует к...
04 нояб. '08 в 10:16
7

Извлечение имени вызывающего метода из метода

Возможный дубликат: Как найти метод, который вызвал текущий метод? У меня есть метод в объекте, который вызывается из нескольких мест внутри объекта. Есть быстрый и простой способ получить имя метода, называемого этим популярным методом. Псев...
05 мар. '09 в 18:22
18

Ошибка Weird MSC 8.0: "Значение ESP не было должным образом сохранено в вызове функции..."

Недавно мы попытались разбить некоторые из наших проектов Visual Studio на библиотеки, и все, казалось, скомпилировалось и построилось в тестовом проекте с одним из проектов библиотеки как зависимость. Однако попытка запустить приложение дала нам сле...
27 сент. '08 в 0:45
4

Является ли fastcall действительно быстрее?

Является ли вызов вызова fastcall действительно быстрее, чем другие соглашения о вызовах, такие как cdecl? Есть ли какие-то тесты, которые показывают, как влияет производительность на вызов?
02 февр. '10 в 23:56
5

Что такое регистры, на которые зарегистрированы вызываемые и вызываемые абоненты?

У меня возникли проблемы с пониманием разницы между списками звонящего и вызываемого абонента и когда использовать что. Я использую MSP430 процедура: mov.w #0,R7 mov.w #0,R6 add.w R6,R7 inc.w R6 cmp.w R12,R6 jl l$loop mov.w R7,R12 ret выш...
13 февр. '12 в 21:51
8

Передать функцию в качестве параметра

Я написал функцию "А", которая будет вызывать одну из ряда других функций. Чтобы сохранить функцию перезаписи 'A', я бы хотел передать функцию, которая будет вызываться, как параметр функции 'A'. Например: function A{ Param($functionToCall) ...
02 мар. '14 в 15:37
10

Почему Mac ABI требует 16-байтного выравнивания стека для x86-32?

Я могу понять это требование для старых систем PPC RISC и даже для x86-64, но для старого испробованного x86? В этом случае стек должен быть выровнен только на 4 байтовых границах. Да, некоторые инструкции MMX/SSE требуют 16-битных выравниваний, но е...
04 мар. '09 в 21:12
5

Как компиляторы C реализуют функции, которые возвращают большие структуры?

Возвращаемое значение функции обычно сохраняется в стеке или в регистре. Но для большой структуры она должна быть в стеке. Сколько копий должно произойти в реальном компиляторе для этого кода? Или он оптимизирован? Например: struct Data { unsig...
28 янв. '10 в 15:42
1

Оптимизация инициализации массива

При компиляции следующего фрагмента кода (clang x86-64 -O3) std::array<int, 5> test() { std::array<int, 5> values {{0, 1, 2, 3, 4}}; return values; } Он произвел типичную сборку, которую я ожидал test(): ...
19 июн. '19 в 12:56