LINUX.ORG.RU

C++: а напишите пример кода, в котором после компиляции операции окажутся переупорядочены?

 


0

5

Хочу кусок кода, версию компилятора и опции, после компиляции с которыми я увижу в ассемблере, что компилятор переупорядочил записи или чтения, а лучше всё сразу.

Ну то есть чтобы по коду какие-то присваивания или чтения (независимые между собой видимо) были написаны в одном порядке, а в асме они бы оказались в каком-то совсем другом.



Последнее исправление: lesopilorama (всего исправлений: 1)
void func(int *a) {
    a[7] = 7;
    a[6] = 6;
    a[5] = 5;
    a[4] = 4;
    a[3] = 3;
    a[2] = 2;
    a[1] = 1;
    a[0] = 0;
}
func(int*):
        movdqa  xmm0, XMMWORD PTR .LC0[rip]
        movups  XMMWORD PTR [rdi], xmm0
        movdqa  xmm0, XMMWORD PTR .LC1[rip]
        movups  XMMWORD PTR [rdi+16], xmm0
        ret
.LC0:
        .long   0
        .long   1
        .long   2
        .long   3
.LC1:
        .long   4
        .long   5
        .long   6
        .long   7
i-rinat ★★★★★
()

На скрутвторе было много хороших статей на эту тему, с примерами как по перестановки комплиятором так и по перестановки процессором

Вот ссылка на вводную статью, а дальше сами найдете

https://scrutator.me/post/2014/11/01/cpu_memory_inter_uniprocessor.aspx

bonta ★★★★★
()