Đây là mã C:Trình biên dịch sẽ tối ưu hóa câu lệnh có điều kiện trong vòng lặp bằng cách di chuyển nó ouside vòng lặp?
struct node{
void *value;
struct node *next;
};
void g(void *p){
/*...*/
}
void f(struct node *head, const int ok){
struct node *p=head;
while (p){
/* ...
code 1
...
*/
if (ok!=0){
g(p->value);
}
p=p->next;
}
}
tôi đã sử dụng gcc để biên dịch mã này. Nếu tôi biên soạn với -O
, nó sẽ tối ưu hóa chức năng f
như thế này:
void f(struct node *head, const int ok){
struct node *p=head;
if (ok!=0){
while (p){
/* ...
code 1
...
*/
g(p->value);
p=p->next;
}
}
else{
while (p){
/* ...
code 1
...
*/
p=p->next;
}
}
}
Nó có thể nhấc nó ra khỏi vòng lặp. Tại sao không kiểm tra? – Hasturkun
Bạn có thể hướng dẫn hầu hết các trình biên dịch để hiển thị mã lắp ráp. Vì vậy, bạn có thể kiểm tra xem bản thân bạn khá dễ dàng. – Joey
"Trình biên dịch sẽ tối ưu hóa XYZ" - tốt, bạn đã suy ra gì từ asembly được tạo ra (mà bạn ** đã kiểm tra trước khi hỏi, phải không?) –