Другими словами, будут ли компиляторы выделять достаточно места в программном стеке для хранения всех переменных на самом глубоком уровне вложенности блоков в текущей функции или они также смотрят на живучесть и объем переменных?
void zoo(int num) {
if (num) {
int a = foo();
bar(a);
} else {
int b = foo();
bar(b);
}
}
Например, приведенному выше коду будут назначены разные смещения в стеке для a
и b
, даже если бы им было назначено только одно смещение (например, rbp - 8
), это также было бы допустимо.Мой вопрос заключается в том, будут ли компиляторы, такие как gcc и clang, когда-либо выводить сборку, где нескольким переменным назначается одно и то же статическое смещение?
Есть ли что-нибудь в спецификациях по этому поводу?
Я хочу знать, существует ли уникальное отображение между исходными переменными и смещениями стека, присутствующими в скомпилированном файле сборки.