Порядок чтения 64-битных переменных (низкий и высокий) в 32-битных системах - PullRequest
0 голосов
/ 18 мая 2018

В 32-битной системе, при попытке прочитать 64-битную переменную, какие биты будут читаться первыми?Высокие или низкие?Или, может быть, это меняется, и мы не можем зависеть от этого?Например:

uint64_t counter = 4; uint64_t foo = counter;

Итак, когда происходит присвоение foo, счетчик будет считываться в 2 32-битных частях (низко и высоко), какая часть читается первой?низкий или высокий или он варьируется?

Ответы [ 2 ]

0 голосов
/ 19 мая 2018

Итак, когда происходит присвоение foo, счетчик будет читаться в 2 32-битных частях (низко и высоко), какая часть читается первой?низкий или высокий или он варьируется?

Может варьироваться.

Стандарт C дает очень мало гарантий относительно порядка доступа к памяти в целом, особенно для переменных, которые не объявленыкак volatile.Возможно, что даже не будет двух обращений к памяти, или что обращения к памяти будут «разделены» (т. Е. Читать одну половину, делать что-то еще, читать другую половину).

0 голосов
/ 18 мая 2018

Насколько я помню, для завершителей нет правила, как реализовывать такие операции.Также не существует такого правила для аппаратного обеспечения.

попробуйте этот

   #include <iostream>

    using std::cout;

    union _64test {
        uint64_t _64;
        uint32_t _32[2];
    };

    int main() {

        _64test temp;
        temp._64 = 15;

        cout << temp._64 << "\n";
        cout << temp._32[0] <<" " << temp._32[1] << "\n";

        return 0;
    }

выход:

15,

15 0


в моем случае нижняя часть была 1-й.благодаря профсоюзной механике вы можете понять это где хотите


...