コンテキスト:C++:(アライメントを学ぼう)char配列の異なる場所を指し示すポインタの比較パフォーマンス
char buffer[99]; int* ptr_int=(int*)(buffer+n);
その後、私は窓を使用して*のptr_intと対策の実行時にいくつかの時間操作を消費しません.h/QueryPerformanceCounter。
混乱:Nの値に対して :0~4、実行時間は、nの値は約12秒である :32,33:5,6,7実行時間は、nの値は約20秒である 実行時間は約12秒です。
これは調整のためかもしれませんが、どのように正確に説明できますか?
ペンティアムデュアルコアT2410/winxpと/グラム++ 3.4.2(mingwの特殊)
編集 私の代わりに私がしようとしています、より良いアプローチを使用することにより、アライメント問題を回避しようとしているわけではありません現代のCPU上int* ptr_int=(int*)(buffer+3);
OR int* ptr_int=(int*)(buffer+33);
これは一部のアーキテクチャでは動作しません。ハードウェア障害が発生します。あなたはあなたのコンパイラが補償しているか、あなたのハードウェアがそれでOKであることを幸運に思っているようです。アラインメントは、オブジェクトのサイズに対して行う必要があります。 –
配列の問題を排除する場合は、配列のchar要素にアクセスする時間を測定するか、int配列を使用してください。 – Amnon
また、 'buffer'のアドレスを見て、どのように整列しているかを確認してください。 – antsyawn