Аргумент размера __builtin_apply для создания вызова в gcc? - PullRequest
2 голосов
/ 27 января 2010

Я бы хотел поиграть с функцией построения вызовов в gcc ...

Из документа:

- Встроенная функция:

void * __builtin_apply (void (*function)(), void *arguments, size_t size)

Эта встроенная функция вызывает функцию с копией параметров. описывается аргументами и размером.

Значением аргументов должно быть значение, возвращаемое __builtin_apply_args. Размер аргумента указывает размер данных аргумента стека в байтах.

Эта функция возвращает указатель на данные, описывающие, как вернуть любое значение, возвращенное функцией. Данные сохраняются в блоке памяти, выделенном в стеке.

Не всегда просто вычислить правильное значение для размера. Это значение используется __builtin_apply для вычисления объема данных, которые должны быть помещены в стек и скопированы из области входящего аргумента.

Мой вопрос: как узнать, какой размер дать этому аргументу размера? И каковы последствия, если значение слишком мало или слишком велико?

Спасибо ...

1 Ответ

1 голос
/ 27 января 2010

Основываясь на фрагментах кода , которые я нашел через google , я бы сказал, что значение размера нельзя вычислять напрямую без дополнительной информации о платформе (или, по крайней мере, без знания соглашения о вызовах). Если размер слишком мал, вы не передадите достаточно аргументов в стек, и функция сделает что-то неуказанное. Если размер слишком велик, вы просто израсходуете ненужное пространство стека.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...