6

I read post
C volatile variables and Cache Memory

But i am confused.

Question:
whether OS will take care itself OR
programmer has to write program in such a way that variable should not go into cache as mention like declaring variable as _Uncached.

Regards
Learner

4

1 回答 1

15

澄清:

volatile是一个 C 概念,它告诉编译器每次从内存中获取一个变量,而不是在寄存器中使用“编译器生成的”缓存版本或优化某些代码。

这里可能引起混淆的是 CPU 缓存与软件缓存(也称为寄存器中的变量)。

CPU/硬件缓存对程序是 100% 透明的,硬件确保它是 100% 同步的。没有什么可担心的,当您load从内存发出 a 并且数据来自 CPU 缓存时,它与寻址内存中的数据相同。

您的编译器可能会决定在寄存器中“缓存”频繁使用的变量,然后这些变量可能与内存不同步,因为硬件不知道这些。这就是volatile关键字所阻止的。常见示例:

int * lock;
while (*lock) {
    // do work
    // lock mot modified or accessed here
}

优化编译器会看到您没有lock在循环中使用,并将其转换为:

if (*lock)
    while (true) {
        // do work
    }

lock如果要被另一个线程修改,这显然不是您想要的行为。因此,您将其标记为 volatile 以防止这种情况发生:

volatile int * lock;
while (*lock) {
    // do work
}

希望这使它更清楚一点。

于 2013-09-09T10:36:11.943 回答