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

问题描述 投票:0回答:2

我开始弄清楚一些关于内存读写的基本想法(假设我们读取或写入的数据还没有被缓存)。

对于以下代码:

int a = 1;

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

但是对于以下代码:

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

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

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

c memory read-write
2个回答
1
投票

假设我们读取或写入的数据还没有被缓存)

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

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

正确。

但是,C 不像汇编语言。 C 指令不一对一映射到机器指令。有“假设规则”。基本上,只要保留程序的可观察行为,编译器就可以生成任何机器代码。 例如:

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

C编译器可以自由地将上面的内容编译为

foo(): mov eax, 35 ret

编译器确实会这样做(启用优化)。如您所见,没有内存读/写。只需写入 
eax

寄存器(必须将函数的返回值放在此处)。并且该值为立即数 (

35
)。
    


0
投票

© www.soinside.com 2019 - 2024. All rights reserved.