J'ai un programme écrit par mon professeur qui simule la façon dont la mémoire écrit dans le cache L2. Il y a quelques endroits où je suis censé remplir le vide. La première chose que je suis supposé faire est d'effacer le bit valide de chaque entrée de cache. Il nous a donné ce qui suit:Confusion sur typedef struct en C++
//number of cache entries (2^11)
#define L2_NUM_CACHE_ENTRIES (1<<11)
/***************************************************
This struct defines the structure of a single cache
entry in the L2 cache. It has the following fields:
v_d_tag: 32-bit unsigned word containing the
valid (v) bit at bit 31 (leftmost bit),
the dirty bit (d) at bit 30, and the tag
in bits 0 through 15 (the 16 rightmost bits)
cache_line: an array of 8 words, constituting a single
cache line.
****************************************************/
Typedef struct {
uint32_t v_d_tag;
uint32_t cache_line[WORDS_PER_CACHE_LINE];
} L2_CACHE_ENTRY;
//The L2 is just an array cache entries
L2_CACHE_ENTRY l2_cache[L2_NUM_CACHE_ENTRIES];
Donc, si je comprends bien, effacer le bit valide signifie simplement le mettre à zéro. Le bit valide est le bit 31 de v_d_tag, donc je devrais utiliser un bitmask - je veux faire quelque chose dans le style de, "v_d_tag = v_d_tag & 0x80000000;", je pense? Mais ce que je ne comprends pas, c'est comment je peux passer et faire ça pour chaque entrée de cache. Je vois le tableau des entrées de cache (l2_cache), mais je ne vois pas comment le v_d_tag est lié à cela.
Quelqu'un peut-il me l'expliquer?
Qu'est-ce que votre question a à voir avec votre titre? –
Eh bien, j'étais assez certain que ce que je ne comprenais pas sur le code était lié à la configuration typedef, et je ne savais pas trop comment exprimer les spécificités de ma question de manière concise pour un titre, alors je suis allé avec. Désolé si j'ai violé l'étiquette, ce n'était pas mon intention - je ne savais pas vraiment de quoi je parlais. ^^; – amb691