Я работаю над проектом класса, который включает моделирование кэша 1-го уровня. Проект делается на C ++, который мне пока не очень удобен. Для симулятора нам нужна структура, представляющая массив тегов, который я создал в классе cache
. У меня также есть структура типа tag
, которая имеет различные члены. Я считаю, что правильно настроил структуру tag_array
, чтобы учесть создание динамически изменяемого массива структур tag
, но я могу ошибаться.
Моя проблема возникает при попытке создать этот массив и инициализировать члены тега равными 0. Я создаю экземпляр структуры тега с именем entry, а затем пытаюсь установить его члены равными нулю, но когда я компилирую, я получите ошибку "warning: variable ‘entry’ set but not used [-Wunused-but-set-variable]"
Я включил большую часть соответствующего кода, но, пожалуйста, попросите больше, если мне не удалось включить что-то необходимое.
cache.h
class cache{
//other code and variables
// Tag Array
typedef struct {
unsigned valid_bit;
unsigned index;
unsigned dirty_bit;
char* tag;
}tag_t;
typedef struct {
unsigned num_entries;
tag_t *entries;
}tag_array;
tag_array cache_tag_array;
//other variables and functions
кеш. cc
cache::cache(unsigned size,
unsigned associativity,
unsigned line_size,
write_policy_t wr_hit_policy,
write_policy_t wr_miss_policy,
unsigned hit_time,
unsigned miss_penalty,
unsigned address_width
){
cache_size = size;
cache_associativity = associativity;
cache_line_size = line_size;
cache_write_hit_policy = wr_hit_policy;
cache_write_miss_policy = wr_miss_policy;
cache_hit_time = hit_time;
cache_miss_penalty = miss_penalty;
cache_address_width = address_width;
cache_num_blocks = size / line_size;
cache_num_sets = size / (line_size * associativity);
cache_tag_array.num_entries = cache_num_blocks;
tag_bits = address_width - log2(cache_num_sets) - log2(cache_line_size);
current_access.block_offset = 0;
current_access.index = 0;
cache::cache_tag_array.entries = new cache::tag_t[cache_num_blocks];
for (unsigned i = 0; i < cache_tag_array.num_entries; i++)
{
cache::tag_t entry = cache_tag_array.entries[i];
entry.valid_bit = 0;
entry.index = 0;
entry.dirty_bit = 0;
entry.tag = {};
}
}
Я думаю, что проблема возникает из этого блока
cache::cache_tag_array.entries = new cache::tag_t[cache_num_blocks];
for (unsigned i = 0; i < cache_tag_array.num_entries; i++)
{
cache::tag_t entry = cache_tag_array.entries[i];
entry.valid_bit = 0;
entry.index = 0;
entry.dirty_bit = 0;
entry.tag = {};
}
, но я могу ошибаться.
Все переменные, используемые в классе конструктора, являются публикуемыми c членами класса кэша, и я знаю, что могу изменить их значения, но не могу получить какие-либо записи в моем массиве тегов. Любая помощь в этом очень ценится. Спасибо.
Этот вопрос не является основной частью задания, по которому я прошу помощи, просто проблема c ++, с которой я не знаю, что делать. Настоящей проблемой симулятора является правильное обновление массива тегов для совпадений и пропущений при чтении и записи.