次はchar x[2048]
は、グローバルvarとfunc1
ですがthread1
によって呼び出され、単純なCのソースコード、ある、func2
はthread2
によって呼び出される:IntelのCPUではchar型の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);
}
アル、
thread1
しばらく呼び出しfunc1
する必要があります、1本のキャッシュラインは、xが32本の キャッシュラインを占有する必要がありますので、私の質問があり、その中に64バイトを持っていますその時までにそのCPUキャッシュに利用可能な32のキャッシュラインstrcpy
? (または)コンパイラは、1つのキャッシュラインがジョブを実行するのに十分であることを知っていますか?thread2
の間に、func2
を呼び出すときまで、そのCPUキャッシュに使用できるキャッシュラインはすべてprintf
ですか? (または)コンパイラは、1つのキャッシュラインを識別することができますか?
https://en.wikipedia.org/wiki/CPU_cache – user3386109
コンパイラは通常、ハードウェアのキャッシュの内容を完全に認識していません。 – molbdnilo
"strcpy/printf'を実行するとどういう意味ですか?キャッシュラインは何もしません。ただ存在するだけです。そして、「そのCPUに利用できる」とは何ですか? – Leeor