Ce qui suit est le code source simple c, où char x[2048]
est une variable globale et func1
est appelé par thread1
, func2
est appelé par thread2
:ombles x [2048] et la ligne de cache d'émission
char x[2048]={0} , y[16]={0};
void func1(){
strcpy(x,y);
}
void func2(){
printf("(%s)\n",x);
}
int main(int argc, char **argv){
strncpy(y,argv[1],sizeof(y)-1);
}
Dans cpu Intel , une ligne de cache a 64 octets, donc x devrait occuper 32 lignes de cache, mes questions sont les suivantes:
tandis que
thread1
appelsfunc1
, devraient al L 32 lignes de cache disponibles pour ce cache CPU jusqu'à ce que fairestrcpy
? (ou) compilateur sait qu'une seule ligne de cache suffit pour faire le travail?Alors que
thread2
appelfunc2
, doit toutes les 32 lignes de cache disponibles à cette cache du processeur jusqu'à ce que puis faireprintf
? (ou) le compilateur peut identifier une ligne de cache suffit?
https://en.wikipedia.org/wiki/CPU_cache – user3386109
Le compilateur est généralement complètement ignorant des détails des caches de matériel. – molbdnilo
Qu'entendez-vous par "faire' strcpy/printf' "? Une ligne de cache ne fait rien, elle existe (ou pas). Et qu'est-ce qui est "disponible pour ce processeur"? – Leeor