c - 内存重新排序示例
问题描述
我正在尝试找出内存重新排序的示例,以便我可以演示屏障的使用(asm volatile (“” : : : “memory”))
我从 stackoverflow 问题之一复制了代码,并使用 gcc -O3 标志对其进行了编译。 __asm__ __volatile__ ("" : : : "memory") 的工作
#include <stdio.h>
int c(int *d, int *e) {
int r;
d[0] += 1;
r = e[0];
d[1] += 1;
return r;
}
int main()
{
int arr[2] = {0x00, 0x01};
int e[2] = {0x1, 0x2};
c(arr, e);
printf("arr[0]:%d\t arr[1]:%d\n", arr[0], arr[1]);
printf("e[0]:%d\t e[1]:%d\n", e[0], e[1]);
return 0;
}
$ objdump -D
00000000000006c0 <c>:
6c0: 83 07 01 addl $0x1,(%rdi)
6c3: 8b 06 mov (%rsi),%eax
6c5: 83 47 04 01 addl $0x1,0x4(%rdi)
6c9: c3 retq
6ca: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1)
这是按照这里的顺序。是否有任何代码实际上演示了重新排序内存操作。
解决方案
推荐阅读
- kotlin - NoSuchMethodError,函数名已更改
- python - 在 pycharm 中使用 Jupyter notebook 命令时的关键错误 5 问题
- javascript - 需要在不点击鼠标或使用键盘但使用语音的情况下触发功能
- javascript - 立即处理 navigation.goBack 操作的正确方法是什么?
- java - 通过多个可选参数过滤 api
- javascript - 如何在数组的开头移动所有零项?
- javascript - 从外部组件单击按钮时在一个组件中打开特定选项卡
- java - 在recyclerview中发布关于activityresult的问题
- html - 如何在 div class='App' 反应之前添加多个静态 html 元素?
- spring-amqp - Spring AMQP 中的预取与批处理