0

簡単なテスト用の簡単なコードを書きました。

#include <stdio.h>

typedef struct
{
    void* Data;
}List;

void x()
{
    getchar();

    int i;
    List* myList[100000];

    for(i = 0; i < 100000; i++)
    {
        myList[i] = (List*)malloc(sizeof(List)*1024*1024);
    }

    getchar();

    for(i = 0; i < 100000; i++)
    {
        free(myList[i]);
    }
}

int main()
{
    x();
    getchar();
    return 0;
}

I've seen program in "taskmgr" in I've seen: - 540K - 4.500K - 544K (4K の違いとは?)

4

2 に答える 2

7

すべての割り当てが成功した場合、約バイトを使用します ( 4 バイト、32 ビット ポインターと100000 * 1024 * 1024 * sizeof (List)仮定すると) 390 GBをわずかに超えます。List

はるかに低い数値を引用しているため、すべての割り当てが実際に成功するとは限らないと想定しても安全です。実際のところ、それらがすべて 32 ビット システムで成功するとは想像しがたいです... いずれにせよ、あなたのコードはこれを決してチェックしないので、見分けるのは困難です。

教訓:malloc()失敗する可能性があり、戻り値をチェックしないと、割り当てが成功したと見なすことはできません。

また、Cの戻り値をキャストしないmalloc()でください。

于 2013-10-17T13:08:55.880 に答える