int main() {
char a[3] = {1,2,3};
return sizeof(a);
}
Run Code Online (Sandbox Code Playgroud)
为a保证在虚拟内存中连续字节?我知道它在物理内存中可能不是连续的,因为映射是由 MMU 在幕后完成的。
如果编译器注意到我没有获取任何元素的地址,那么是否可以将它们放在内存中的非连续地址上,甚至将它们放在寄存器中?
让我们假设优化器不会在我的示例中完全摆脱它。
是否保证在虚拟内存中的连续字节中?我知道它在物理内存中可能不是连续的,因为映射是由 MMU 在幕后完成的。
您的代码保证表现为数组位于地址空间的连续字节中。
如果编译器注意到我没有获取任何元素的地址,那么是否可以将它们放在内存中的非连续地址上,甚至将它们放在寄存器中?
即使你拿了地址,这样做也是免费的。只要代码不被破坏,编译器就可以以任何它想要的方式编译您的代码。
让我们假设优化器不会在我的示例中完全摆脱它。
好的。但这是允许的。C有一个“假设”的规则,这意味着所有规则都只是你的代码必须遵守的行为,他们不限制如何编译器(或计算机)获得该行为。
| 归档时间: |
|
| 查看次数: |
90 次 |
| 最近记录: |