4

今朝、このトピックについて同僚と話し合いました。彼は、配列をポインターの配列として割り当てる方が常に良いと述べています。すべての要素を個別に割り当てると、空きメモリ チャンクを取得する可能性が高くなるからです。次のように考えてください。

// Consider n_elements as a dynamic value
int n_elements = 10, i;
int **ary = (int **) malloc(sizeof(int *) * n_elements);

for(i = 0; i < n_elements; i++)
{
  ary[i] = (int *) malloc(sizeof(int));
}

彼のアプローチとは対照的に、要素の配列を割り当てる方が良いと思います。なぜなら、ヒープに広がる参照の束ではなく、コンパクトなメモリ チャンクを取得できるからです。このようなもの:

int n_elements = 10;
int *ary = (int *) malloc(sizeof(int) * n_elements);

ary[0] = 100;

この会話の後、私はそれについて考えてきましたが、私の最終的な結論は、それは依存しているということです. 上記の理由から、小さなデータ型を扱う場合は 2 番目の解決策の方が適していると思いますが、大きな構造体の配列を割り当てる場合は、おそらく最初の解決策の方が適しています。

私の結論は別として、あなたはそれについてどう思いますか?

4

1 に答える 1