首页 > 解决方案 > 内存重新排序示例

问题描述

我正在尝试找出内存重新排序的示例,以便我可以演示屏障的使用(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)

这是按照这里的顺序。是否有任何代码实际上演示了重新排序内存操作。

标签: clinuxgccassemblyx86

解决方案


推荐阅读