アレイ上に二つのループを考える:キャッシング - RAMアクセス時間
int *arr = new int[1024 * 1024];
// Loop1
for (int i = 0; i < n; i++) arr[i] *= 3;
// Loop2
for (int i = 0; i < n; i += 16) arr[i] *= 3;
どちらもランダウの記号にはO(n)であるように、しかし、彼らは、RAMアクセスの同じ数を有します。すなわち同じ数のキャッシュミスを生じる。
なぜ同じ数のRAMアクセスがありますか?ループ2は、各訪問後にRAMアクセスが少なくなりますが、私は16だけインクリメントされますか?
どのようなOSですか?どのプロセッサですか?コンパイラは何ですか?あなたは情報なしで特定の質問をしています。その答えが何であれ、それはおそらく複雑すぎるでしょう。 – Stargateur
こんにちはStargateur、それはc/C++言語に特有の一般的なコンピュータサイエンスの話題です.OSはUnixやLinuxが理想的です。異なる機械とハードウェアは答えに影響してはならない。 –
@JasonLiuキャッシュの詳細は、ハードウェア固有のものです。 – molbdnilo