关于读/写的 C/C++ 编程

问题描述

我开始想出一些关于内存读写的基本思路(假设我们读写的数据还没有被缓存)。

对于以下代码

int a = 1;

这绝对是写,因为我们将值“1”写入变量“a”的内存位置。

但是对于以下代码

int a,b;
a = 1;
b = a;

当我们执行语句“b = a;”时,我们实际上是在执行一读一写吗? 根据我的理解,我认为是一读一写,因为我们必须先加载'a'的值,然后将值写入'b'。

不确定我的理解是否正确。请帮助我澄清这些基本想法。 非常感谢您的帮助。

解决方法

假设我们读取或写入的数据尚未缓存)

我不明白缓存与此有什么关系。

当我们执行语句“b = a;”时,我们实际上是在执行一读一写吗?

正确。

然而,C 不像汇编语言。 C 指令不会一对一地映射到机器指令。有the as-if rule。基本上,只要程序的可观察行为被保留,编译器就可以生成任何机器代码。

例如:

auto foo()
{
    int a = 24;
    int b = 11;
    int c = a + b;

    return c;
}

C 编译器可以随意编译以上内容

foo():
        mov     eax,35
        ret

编译器确实会这样做(启用优化)。如您所见,没有内存读/写。只需写入 eax 寄存器(必须放置函数的返回值)。并且该值是一个中间值 (35)。