0

我有以下代码:

struct cache_t *                /* pointer to cache created */
cache_create(char *name,        /* name of the cache */
             int nsets,         /* total number of sets in cache */
             int bsize,         /* block (line) size of cache */
             int balloc,        /* allocate data space for blocks? */
             int usize,         /* size of user data to alloc w/blks */
             int assoc,         /* associativity of cache */
             enum cache_policy policy,  /* replacement policy w/in sets */
             /* block access function, see description w/in struct cache def */
             unsigned int (*blk_access_fn) (enum mem_cmd cmd,
                                            md_addr_t baddr, int bsize,
                                            struct cache_blk_t * blk,
                                            tick_t now,
                                            int context_id),
             unsigned int hit_latency)
{                               /* latency in cycles for a hit */
    struct cache_t *cp;
    struct cache_blk_t *blk;
    int i, j, bindex;
----
----
---

  cp->blk_access_fn = blk_access_fn;

----
---

我想打印 context_id 和 baddr 。我该怎么做 ? 我已经尝试过类型转换和一切,但它一直给我错误:符号“context_id”在当前上下文中无效。帮助将不胜感激。

4

2 回答 2

4

我想你误解了这个cache_create功能。它根本没有context_idbaddr参数。它作为参数所blk_access_fn具有的是函数指针。该函数可能被调用cache_create并且它将这两个变量作为参数。

一种更好地可视化的方法是这样的:

typedef unsigned int (*blk_access_fn_ptr)(enum mem_cmd cmd, md_addr_t baddr, int bsize, struct cache_blk_t *blk, tick_t now, int context_id);

struct cache_t *            /* pointer to cache created */
cache_create(char *name,        /* name of the cache */
     int nsets,         /* total number of sets in cache */
     int bsize,         /* block (line) size of cache */
     int balloc,        /* allocate data space for blocks? */
     int usize,         /* size of user data to alloc w/blks */
     int assoc,         /* associativity of cache */
     enum cache_policy policy,  /* replacement policy w/in sets */
     /* block access function, see description w/in struct cache def */
     blk_access_fn_ptr blk_access_fn,
     unsigned int hit_latency)  /* latency in cycles for a hit */
{
    ...
}

此代码在功能上与您发布的代码相同。如您所见,cache_create根本没有您要查找的参数。您必须传递一个带有适当原型的函数作为blk_access_fn参数,并且它将具有它们。

于 2012-12-18T21:01:19.557 回答
0

如果我没看错,你没有传入 context_id,你正在接受一个 fxn 指针,它接受一个 context_id 的参数。您可以在 blk_access_fn 内部访问它们,但不能在 cache_create 内部访问。

于 2012-12-18T21:03:57.207 回答