この質問は以前に尋ねられたものと似ていますが、メモリページングは考慮されていないと思います。だから、私はここで再び同様の質問を提起しています:
// version 1
int nums[100];
int* pNum = nums;
for(int i=0;i<100;i++,pNum++){
foo(pNum);
}
// version 2
for(int i=0;i<100;i++){
foo(nums[i]);
}
どのバージョンが速いでしょうか?以前は、両方のバージョンでメモリアドレスの位置をインクリメントする必要があるため、生成されたアセンブリコードは非常に似ていると言われていましたが、非常に大きな配列を考慮すると、メモリページングのパフォーマンスは大幅に変化しますか?それらの1つはタイプロングシフトを必要としますが、他の1つは配列のベースメモリアドレスからのシフトを必要とするので?プラットフォーム/コンパイラに非常に依存していることは知っていますが、それでも人々の一般的な慣習、特に画像処理や科学計算などの大規模なデータ型での作業について知りたいですか?ありがとう。