Có thể thiết kế một trình biên dịch tối ưu hóa một vòng lặp trong đó các mảng được truy cập theo cách khác không? Ví dụ như thế này:
// int[] a,b
int sum = 0;
for(int i = 0; i < n; i++)
{
sum += a[i] + b[i];
}
Với lưu trữ mảng tuần tự thông thường, a[i]và b[i]có thể cách xa nhau trong bộ nhớ. Do đó, tôi nghĩ rằng tối ưu hóa trình biên dịch tốt sẽ phát hiện ra điều đó a[i]và b[i]luôn truy cập cùng lúc và lưu trữ các mảng xen kẽ, a[0] b[0] a[1] b[1] ...để một truy cập bộ nhớ có thể truy xuất cả hai a[i]và b[i].
a[i]và b[i]được truy xuất bằng một thao tác bộ nhớ, nhưng chúng được đặt gần đó trong bộ nhớ để có hiệu năng bộ đệm tốt hơn.