Mq-b / Loser-HomeWork

卢瑟们的作业展示,答案讲解,以及一些C++知识
https://mq-b.github.io/Loser-HomeWork/
Apache License 2.0
622 stars 132 forks source link

第十四题 Matrix-A.cpp #191

Closed Matrix-A closed 9 months ago

Matrix-A commented 9 months ago

https://godbolt.org/z/PdW9KdKEP

Mq-b commented 9 months ago

看到新的解法我很开心,但能否解释一下这些代码的具体意义?

虽然总体来说原理很简单,但是细节的还是不好直接看出。

Matrix-A commented 9 months ago

看到新的解法我很开心,但能否解释一下这些代码的具体意义?

虽然总体来说原理很简单,但是细节的还是不好直接看出。

  1. 零初始化的非局部变量在内存中是在一起的
  2. 关闭优化是因为修改语句和读取ss::a的语句没有直接关系,编译器可能会将读取ss::a优化到修改前
  3. 存在两个修改的原因是因为ss::a和b的前后顺序是不确定的,至少msvc和(clang、gcc)是不一样的,可能和系统有关,未深入研究,反正不符合标准,写个越界也没有问题吧,更深入的可以通过读取elf文件数据确定变量的相对位置