2

C++ または Java でインクリメンタル ガベージ コレクション アルゴリズムをシミュレートする必要があります。これを踏まえて疑問に思いました。

(キーボードからの) 入力として、stdinこのコードにメモリを割り当てるように求められます。構文は次のようになります。

x = alloc(128KB);

私の質問:malloc課題に使用しても大丈夫ですか? または、メモリを割り当てる他の方法はありますか? 割り当てのサイズが最大 GB になる可能性があるため、この疑問がありました。使用mallocするのは良い考えではないかもしれません。

4

2 に答える 2

1

ulimit を超えない限り、malloc は好きなだけメモリを割り当てることができます。以下を実行してテストしてください。

#include <stdlib.h>
#include <string.h>

#define ONEGB (size_t)(1073741824)

int main() {
    char *p;
    p = malloc(ONEGB);
    if (!p) {
        perror("malloc");
    }
    else {
        memset(p, 0, ONEGB);
    }
    return 0;
}
于 2013-05-10T03:05:18.457 に答える
1

まず、巨大なメモリの割り当てを禁止したい場合は、ユーザーの入力値を確認するだけですが、巨大なメモリとしてどれだけのメモリを考えているかわかりません。メモリの割り当てに失敗した場合、malloc と calloc は NULL ポインターを返すため、心配する必要はないと思います。

次に、この場合には「calloc」も使用できます。

void calloc(size_t num, size_t size);

「num」は割り当てのための平均要素数で、「size」はもちろん要素のサイズです。以下のコードは同じ結果になります。

ar = (int *)malloc(5 * sizeof(int));
ar = (int *)calloc(5, sizeof(int));

ただし、「calloc」を選択すると、メモリ量を単位とカウントで分割できるため、コードをより論理的に管理できます。また、「calloc」を使用する場合、メモリ値をゼロに設定するために memset を使用する必要はありません。'calloc' はメモリ値を自動的にゼロに設定します。

この記事がお役に立てば幸いです。

于 2013-05-10T05:21:51.923 に答える