Если вы хотите использовать cache
в качестве глобальной переменной, объявите ее в глобальной области, и перед ее использованием.
struct cache {
int validBit;
int dirtyBit;
unsigned int tag;
unsigned int nextToReplace;
};
struct cache cache[mapping][numSets];
Не очень хорошая идея ставитьпеременная в глобальной области видимости, если вы можете избежать этого.
Здесь, чтобы «инкапсулировать» функцию кэширования, я предлагаю использовать вместо static переменную в отдельный файл со всеми функциями, связанными с кэшем, чтобы поместить его в область действия "file" .Поскольку mapping
, offset
и index
являются аргументами извне ваших функций кэширования, передайте их как параметры.
// cache-lib.c
// Declare the struct in the c file, it's only needed here
struct cache {
int validBit;
int dirtyBit;
unsigned int tag;
unsigned int nextToReplace;
};
static struct cache cache[mapping][numSets];
// Stores below variable here, in the "file" scope.
static mapping, offset, index;
// Below cache functions. Declare them an includable header.
/// setupCache() definition. Since it needs mapping, offset and index which
/// are retrieved from the outside, you can pass them as parameter.
void setupCache(int mapping, int offset, int index) {
//// [...]
}
/// hitChecker. Maybe you need here to store extra variables
/// as "file-scope" ones like index and mapping
void hitChecker() {
//// [...]
}
Наконец, заголовок, который вы будете использовать везде, где вам нужен ваш кеш lib:
// cache-lib.h
void setupCache(int mapping, int offset, int index);
void hitChecker();
Вы также можете включить его в cache-lib.c
, чтобы не беспокоиться о проблемах, связанных с порядком объявления функций.