Tôi có một câu hỏi về đoạn code C sau:Khi nào là không gian ngăn xếp được phân bổ cho các biến cục bộ?
void my_function()
{
int i1;
int j1;
// Do something...
if (check_something())
{
int i2;
int j2;
// Do something else...
}
// Do some more stuff...
}
Có bất kỳ đảm bảo khi nào không gian ngăn xếp được phân bổ/deallocated cho i2 và j2 hay nó phụ thuộc vào trình biên dịch? Tôi sẽ mong đợi con trỏ ngăn xếp được điều chỉnh khi i2 và j2 đi vào phạm vi và điều chỉnh trở lại khi chúng vượt ra ngoài phạm vi, nhưng sau đó nghĩ rằng một số trình biên dịch có thể chỉ "tối ưu hóa" toàn bộ và tài khoản cho các biến trong phạm vi lồng nhau khi chức năng đầu tiên được nhập vào.
Tôi biết tôi có thể xem mã lắp ráp được tạo bởi trình biên dịch của tôi, nhưng đã tự hỏi liệu việc triển khai có thể được để lại cho trình biên dịch hay không.
Cảm ơn!
Cũng xem xét các biến có thể được cấp cho các thanh ghi ... – unwind