Когда вы вызываете функцию из 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