Описание тега calling-convention
A calling convention refers to the way a function transmits parameters to a called function and receives a return value from it.
5
ответов
C (не C++) проходной вопрос / справочное интервью
У меня есть список вопросов, которые я хотел бы задать, чтобы проверить навыки кандидата C для программирования встроенных систем. Один из стандартных вопросов, который у меня есть, который также есть во многих открытых списках вопросов, таков, но я…
18 май '11 в 21:13
1
ответ
Ошибка связи со сторонней статической библиотекой, созданной в предыдущей версии Visual Studio
Я работаю над проектом, который ссылается на стороннюю статическую библиотеку (ее называют EXTERNALLIB). В Visual Studio 2005 я смог соединиться с EXTERNALLIB и создать работающий исполняемый файл. Сейчас мы используем Visual Studio 2008, и я получа…
21 сен '09 в 20:37
2
ответа
Ошибка cdecl: ожидаемый инициализатор перед
У меня проблема с соглашением о вызовах cdecl: void Test1(char* str, ...) // ok {} void cdecl Test2(char* str, ...) // error: expected initializer before 'Test2' {} int main() {} Что я должен сделать, чтобы компилятор распознал соглашение о вызовах …
06 янв '12 в 12:02
1
ответ
Запутаться с ABI соглашение о вызовах и арки
Я путаюсь со всеми этими терминами: ABI, соглашение о вызовах и аппаратная архитектура. ABI является связью с архитектурой: x86-64 имеют другой ABI, чем i386. Но тогда вы также можете определить свое собственное соглашение о вызовах cdecl... Ну так …
12 авг '10 в 16:21
2
ответа
Созыв соглашения в с
Кто -нибудь, пожалуйста, скажите мне, как изменить соглашение о вызовах по умолчанию в c?
13 янв '10 в 04:57
2
ответа
Формат абстрагируемого параметра функции и его влияние на производительность?
Я занимаюсь разработкой виртуальной машины, и я хотел бы сделать возможным вызывать скомпилированные функции. Тем не менее, поскольку каждая функция может иметь свою сигнатуру, я планирую обобщить все вызовы на 2 возможных сценария - вызов функции б…
09 сен '13 в 09:58
3
ответа
Встроенная функция и пример __thiscall __cdecl Bjarne String
У меня есть реализация класса String, как в Бьярне "C++...". Я хочу, чтобы read() и другие функции доступа были встроены, поэтому я пометил их как встроенные. Это нормально, но определение хеш-функции, которая выполняет чтение по ссылке на класс Str…
22 дек '12 в 20:24
1
ответ
Почему GCC не оптимизирует функции пролога и эпилога (push ebp; mov ebp, esp; ...; pop ebp)
При компиляции простой функции, которая даже не изменяет регистр ebp, GCC сохраняет значение в начале функции и затем восстанавливает то же значение в конце: #add.c int add( int a, int b ) { return ( a + b ); } gcc -c -S -m32 -O3 add.c -o add.S #add…
07 фев '14 в 05:44
1
ответ
Вызов функций-членов C++ с соглашением thiscall
У меня есть приложение, написанное на C++, которое загружает мою DLL, написанную на Delphi. Приложение вызывает экспортированную функцию DLL и передает ей указатель на объект класса, который имеет несколько функций-членов, которые я хочу вызывать из…
14 дек '10 в 20:42
0
ответов
Соглашения о вызовах функций ассемблера Intel x86_64 (linux, windows), аргументы стека, манипулирование стеком
Я вызываю ассемблерную функцию из C (отдельный asm-файл) и передаю ей 6 аргументов-указателей. В Linux(с использованием Nasm) соглашение о вызовах: rdi, rsi, rdx, rcx, r8, r9 и остальное в стеке. В Windows (с использованием Masm) соглашение о вызова…
19 июн '16 в 08:59
2
ответа
Что находится в стеке 68000, когда в программу входит классический MacOS?
Я пытаюсь понять точку входа старого классического приложения Mac. Я разобрал первый ресурс CODE (не CODE#0, который является таблицей переходов). Код ссылается на некоторые переменные вне стека: слово в 0004(A7), массив длинных слов, начинающихся в…
30 апр '10 в 12:01
0
ответов
Как сохранить соответствующие регистры при вызове функции?
Это пример кода, который задается вопросом, и мне нужно вызвать функцию aaa и сохранить регистры. aaa: push{lr} push{r1,r2,r3,r4} ldr r2, 0x20004000 move r3,r0 ldrd r6,r7,[r2,#5] mov r5,r6 bbb: ldrd r6, r7, [r2,#4] sub r8,r6,r5 cmp r8,r4 bls bbb pop…
02 ноя '18 в 08:48
1
ответ
Почему в соглашении о вызовах x86-64 System V аргументы передаются в регистры, а не только в стек?
Почему 32-битный C помещает все аргументы функций прямо в стек, а 64-битный C помещает первые 6 аргументов в регистры, а остальные - в стек? Таким образом, 32-битный стек будет выглядеть так: ... arg2 arg1 return address old %rbp Хотя 64-битный стек…
22 авг '18 в 23:26
2
ответа
Как (перекрестно) скомпилировать как ARM hard-, так и soft-float (softfp) с помощью одного GCC (cross-) компилятора?
Я хотел бы использовать один (кросс-) компилятор для компиляции кода для различных соглашений о вызовах ARM: так как я всегда хочу использовать инструкции с плавающей запятой и NEON, я просто хочу выбрать соглашение о вызовах с плавающей запятой или…
21 мар '14 в 14:45
2
ответа
Могу ли я использовать регистр в качестве счетчика цикла?
Поскольку соглашение о вызове функции указывает, какие регистры сохранены, можно ли использовать регистр в качестве счетчика цикла? Сначала я подумал, что ecx регистр используется в качестве счетчика цикла, но после обнаружения, что stdcall Функция,…
03 янв '15 в 13:54
2
ответа
Вызов JavaScript в сравнении с функциями возврата
Прежде чем перейти к сути моего вопроса, вот код, который идет перед рассматриваемой областью. function arrayToList(array) { var list = null; for (var i = array.length - 1; i >= 0; i--) list = {value: array[i], rest: list}; return list; } functio…
12 июн '15 в 22:10
4
ответа
Ruby on Rails вызывает методы объектов
Есть кое-что, чего я не понимаю в рубине. @items.each do |item| item.column end будет работать и вернет мне значение этого столбца в рельсах. но item = @items[some_item_id] item.column даст мне метод не найдено исключение для ноль. Оба раза я получа…
08 сен '14 в 09:15
1
ответ
Вызов printf в расширенном встроенном ASM
Я пытаюсь вывести одну и ту же строку дважды в расширенном встроенном ASM в GCC, на 64-битном Linux. int main() { const char* test = "test\n"; asm( "movq %[test], %%rdi\n" // Debugger shows rdi = *address of string* "movq $0, %%rax\n" "push %%rbp\n"…
28 май '16 в 19:05
1
ответ
Как std::function знает о соглашении о вызовах?
int __cdecl ccall(int i) { wprintf(L"ccall(%d)", i); return 0; } int __stdcall stdcall(int i) { wprintf(L"stdcall(%d)", i); return 0; } int __cdecl wmain(int argc, wchar_t **argv) { std::function<int(int)> fnc = ccall; std::function<int(int…
16 апр '12 в 07:20
6
ответов
Что такое регистры сохраненных абонентов и абонентов?
У меня возникли проблемы с пониманием разницы между сохраненными регистрами вызывающих и вызываемых абонентов и когда что использовать. Я использую 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 r…
13 фев '12 в 21:51