Очищает ли среда выполнения C домашние слоты аргументов перед вызовами функций?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Очищает ли среда выполнения C домашние слоты аргументов перед вызовами функций?

Сообщение Anonymous »

Когда вы вызываете функцию из C/C++, некоторые параметры которой меньше 64 бит, обнуляет ли среда выполнения память стека в исходном местоположении этих параметров? Или верхняя часть каждого параметра содержит мусор?
Пространство для каждого параметра составляет 8 байт (64 бита), но они могут представлять 8, 16 или 32-битные значения.Предположим, что параметры не передаются по регистру, поскольку этот вопрос относится к любому параметру, а не только к первым четырем.
void foobar(bool a, i32 b, float c, i64 d)
{
int x = 0, y = 0, z = 0;
}

----------------------------------------
# Stack Frame #

[... Previous StackFrame ...] //
[d]
[c]
// Do the top 32 most-significan-bits of param 'b' contain garbage, or zero?
[a]
[ReturnAddr]
[Saved rbp]
[x]
[y]
[z]

// read 'b' value -- if the top 32bits of 'b' contains garbage, rax has wrong value.
mov rax, qword ptr[rbp+24]


Подробнее здесь: https://stackoverflow.com/questions/791 ... tion-calls
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»