我目前正在做一个项目来模拟加载和存储信息,例如计算机缓存。

我使用malloc将结构加载到内存中,但是我不知道如何再次检索该信息。
对于任何一行,我都需要能够调用缓存中的特定行,并查看它是否像缓存一样导致“命中或未命中”。

struct cache {int s; int E; int b;}; //my struct

//creating a similated cache in memory.
struct cache** c1 = (struct cache**) malloc( pow(2,ssize) * Esize * sizeof(struct cache));`

最佳答案

基本上当你做

struct cache** c1 = (struct cache**) malloc( pow(2,ssize) * Esize * sizeof(struct cache)).


那是一个指向结构缓存的指针。它类似于指向结构缓存的指针数组,但它不在您的堆栈内存中,而是在您的堆内存中。但是,您做错了。您的结构缓存**的每个索引都假定等于结构缓存的指针的大小。下面的代码可能解释了所有内容。

在获得用于struct cache **的空间之后,您假设为其每个索引分配一个指向struct * cache的指针,或者malloc一个指向struct cache的指针,其大小等于struct cache的大小。下面的代码,我使用malloc创建了10个索引。所以0-9。

#include <stdlib.h>
#include <stdio.h>


struct cache {int s; int E; int b;}; //my struct

//creating a similated cache in memory.
int main(){
    // Each index equal the size of a pointer to struct cache and there is 10 index
    struct cache** c1 = (struct cache**) malloc( sizeof( struct cache* ) * 10 );

    // Each index is a pointer to struct cache with the malloc size it pointing
    // to equal to struct cache
    c1[0] = (struct cache*) malloc( sizeof(struct cache) );

    // Any later index would have to use malloc or assign a pointer to c1

    c1[0]->s = 1;
    c1[0]->E = 2;
    c1[0]->b = 3;

    printf("%d %d %d", c1[0]->s,
                       c1[0]->E,
                       c1[0]->b );
    return 0;

}

08-18 10:43