Очищает ли среда выполнения 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

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