-1
char buffer[424242] = {0};

buffer[index]同じくらい速い*bufferですか?

for (int i = 0; i < SIZE; ++i) {
  buffer[i] = 42;
}

char* end = buffer + SIZE;
for (char* pos = buffer; pos != end; ++pos) {
  *pos = 42;
}

私の質問は、メモリプラスの位置を設定し、1サイクルで特定の値にオフセットできるアセンブリ命令はありますか?

LEAはアドレスをロードし、このように乗算するようです。

4

2 に答える 2

1

*buffer少なくとも。と同じくらい速いbuffer[index]です。に依存しindexます。の場合index == 0、それらは同じように高速になります。

あなたの編集によると:

char& end = buffer + SIZE;
for (char* pos; pos != end; ++pos) {
  *pos = 42;
}

を初期化しないため、未定義の動作を呼び出しますpos

2回目の編集によると:

最初に読みやすくするためのコードを記述し、具体的な結果が得られた後でのみプロファイルを作成し、場合によっては変更します。

for (int i = 0; i < SIZE; ++i) {
  buffer[i] = 42;
}

ずっと読みやすいです、それに固執します。

于 2012-09-19T11:58:53.873 に答える
1

これがあなたが期待する答えであるかどうかはわかりませんが、解決すべきパフォーマンスの問題さえありますか?

*bufferあなたの質問タグリストには「最適化」が含まれています:あなたのコードで利用可能な唯一の最適化が書き込みまたはの選択であった場合、私は非常に驚きますbuffer[]

本当にパフォーマンスの問題がある場合は、最初にコードのプロファイルを作成して、ボトルネックが何であるかを把握する必要があります。

于 2012-09-19T12:19:03.910 に答える