非常に大きな配列を C 言語で表す方法は?
C言語では、超大規模な配列を表すために動的メモリ割り当てを使用できます。動的メモリ割り当ては、標準ライブラリ関数malloc、calloc、reallocを使用して実装できます。
具体的な手順は以下の通りです。
- 必要な配列の要素数に要素のサイズを掛けた分のメモリをmalloc関数で確保する。例えば1億個のintの配列を確保するには以下のようなコードになる:
- int* arr = (int*)malloc(100000000 * sizeof(int));
- この結果、ヒープに 1 億個の整数分のメモリが確保されることになります。
- mallocと同様のcalloc関数を使用してメモリブロックを割り当てますが、callocはメモリ内の各バイトを0で初期化します。たとえば、100000000個の整数が含まれる配列を割り当て、すべての要素を0に初期化する場合は、次のコードを使用できます。
- int *arr = (int *)calloc(100000000, sizeof(int));
- ヒープ上に 1億個の整数を記憶するメモリが割り当てられ、すべての要素が 0 に初期化される。
- メモリー割り当てサイズの再調整が必要になった場合は、realloc 関数を使用できます。
例えば、以前割り当てた配列のサイズを 200000000 個の整数へ増やす場合は、以下のコードを使用できます。 - int* newArr = (int*)realloc(arr, 200000000 * sizeof(int));
if (newArr != NULL) {
arr = newArr;
} - ヒープ上に新たに2億個整数分のメモリを再割り当てして、そこへこれまでのデータをコピーするが、realloc関数は新しいポインタを返す可能性があるのでNULLチェックが必要となる。
動的メモリを確保したら、配列が不要になったら、free() 関数で解放してメモリリークを防ぐことに注意する必要があります。例えば、
free(arr);