以下是简单的C源代码,其中char x[2048]
是一个全局变量和func1
由thread1
叫,func2
由thread2
称为:焦X [2048]和高速缓存行的问题
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);
}
在Intel的CPU ,一个高速缓存行中有64个字节,所以x应占32个 的高速缓存行,我的问题是:
而
thread1
电话func1
,应人l 32个高速缓存线可用于该CPU高速缓存,直到然后做strcpy
? (或)编译器知道只有一个缓存行就足以完成这项工作?虽然
thread2
请致电func2
,那么所有32个高速缓存线都可用于该CPU高速缓存,直到那时做printf
? (或)编译器可以识别一个缓存行就够了?
https://en.wikipedia.org/wiki/CPU_cache – user3386109
编译器通常是完全不知道的硬件高速缓存的细节。 – molbdnilo
“do'strcpy/printf'”是什么意思?缓存行不做任何事情,它只是存在(或不)。什么是“可用于该CPU”? – Leeor