-2

キャッシュをシミュレートするために 2D 配列を作成します。キャッシュ ラインごとに、構造体を使用して定義します。キャッシュを初期化したいときに、malloc を使用すると何か問題が発生します。コード内の間違った場所をマークしました。ありがとう!

typedef struct {
    int valid;
    int tag;
    int lruIndex;
} Line; 

Line** initCache(int s, int E){

    int i, j;
    //int setSize = sizeof(Line *);
    //int lineSize = sizeof(Line);
    /* allocate memory to cache */
    //printf("%d   %d\n", setSize, lineSize );
    Line** cache = NULL;
    cache = (Line **)malloc((1 << s) * sizeof(Line *)); //set 

    //check for memory error
    if (!cache)
    {
        printf("%s\n", "allocate memory failed 1111111");
        exit(-1);
    }

    for (i = 0; i < (1 << s); i++){
        cache[i] = (Line *)malloc(E * sizeof(Line));   <<<<<<< i think here something is wrong, cache[i] returns NULL and then print "allocate memory failed  22222222"

        //check for memory error
        if (cache[i])
        {
            printf("%s\n", "allocate memory failed  22222222");
            exit(-1);
        }

        for(j = 0; j < E; j++){
            cache[i][j].valid = 0;   //initial value of valid
            cache[i][j].lruIndex = j; //initial value of lruIndex 0 ~ E-1
        }
    }

    return cache;
}
4

2 に答える 2

1
if (cache[i])
    {
        printf("%s\n", "allocate memory failed  22222222");
        exit(-1);
    }

!= NULL の場合に終了cache[i]します。これは、メモリが割り当てられたときに終了することを意味します。

正しい方法で動作するには、条件を次のように変更します。

(cache[i]==NULL)

TRUEmalloc が失敗した場合、これは に評価されます。

于 2013-10-07T19:40:48.507 に答える