nếu tôi biên dịch mãtại sao vôn bay hơi không được tối ưu hóa ngay cả trong các trường hợp rất đơn giản?
int main()
{
int i;
i = 1;
i = 2;
}
trong VS với Release và tối ưu hóa, tháo gỡ trông giống như:
int main()
{
int i;
i = 1;
i = 2;
}
010D1000 xor eax,eax
010D1002 ret
nhưng nếu tôi viết từ "ổn định":
int main()
{
01261000 push ecx
volatile int i;
i = 1;
01261001 mov dword ptr [esp],1
i = 2;
01261008 mov dword ptr [esp],2
}
0126100F xor eax,eax
01261011 pop ecx
01261012 ret
không ai biết tại sao VS lá mã này? là có bất kỳ tác dụng phụ từ nó? đó là mã duy nhất trong chương trình, vậy tại sao trình tối ưu hóa không thể chỉ xóa nó đi?
"Tôi đã nói với nó để X. Tại sao nó X?" – delnan
+1 cho câu hỏi sai lệch được xây dựng tốt. –
Tôi sẽ tưởng tượng nó không có giá trị (MSVC) phát triển thời gian để làm cho tình hình này được tối ưu hóa, vì nó là vô nghĩa để khai báo một biến không tĩnh cục bộ dễ bay hơi. –