首页 > 解决方案 > 用于缓存模拟器的 malloc 两个结构

问题描述

typedef struct {
    uint32_t valid_bit;
    uint32_t tag;
    uint32_t index;
    uint32_t data[4];
} Block;

// Final cache structure
typedef struct {
    Block* blocks;
} Cache;

Cache myCache;

myCache.blocks = (Block*) malloc(noOfBlocks * sizeof(Block));

for (int i = 0; i < noOfBlocks; i++) {
    for (int j = 0; j < 4; j++){
           myCache.blocks[i].valid_bit = 0;
           myCache.blocks[i].tag = 0;
           myCache.blocks[i].index = i;
           myCache.blocks[i].data[j] = 0;
    }
}

我不确定这是否应该使用 malloc。我是否也必须 malloc 我的数据 [] 以便以后访问它?

另外,这是如何初始化我的缓存吗?

提前致谢!

标签: ccachingmemorystructmalloc

解决方案


循环中的前三个语句for应该在外循环中:

for (int i = 0; i < noOfBlocks; i++) {
    myCache.blocks[i].valid_bit = 0;
    myCache.blocks[i].tag = 0;
    myCache.blocks[i].index = i;
    for (int j = 0; j < 4; j++) {
        myCache.blocks[i].data[j] = 0;
    }
}

还要确保在使用完内存后释放内存:

free(myCache.blocks);

除此之外还好。

我是否也必须 malloc 我的数据 [] 以便以后访问它?

不,数组不是动态分配的。


推荐阅读