Невыровненный доступ int64_t на x86: могут ли параллельные потоки чтения/записи привести к промежуточным значениям состоC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Невыровненный доступ int64_t на x86: могут ли параллельные потоки чтения/записи привести к промежуточным значениям состо

Сообщение Anonymous »

На процессоре Intel x86, если int64_t a хранится по невыровненному адресу, например 0x7ffbc82f1c7a, и поток записи изменяет значение a, требует ли это двойного доступа к памяти из-за невыровненного характера? В этом сценарии, если поток чтения обращается к значению, возможно ли для него прочитать промежуточное состояние значения?
Я использовал mmap в качестве распределителя памяти для выделения пространства и выполнил приведение типа, что привело меня к столкнуться с этой проблемой. При изменении значения с -1 на 153538 моя программа вместо этого читала -281474976557118. Дополнение обоих значений поразительно похоже, что заставляет меня подозревать, что было прочитано промежуточное состояние.

Код: Выделить всё

The two's complement of -1 is:
1111111111111111111111111111111111111111111111111111111111111111
The two's complement of 153538 is:
0000000000000000000000000000000000000000000000100101011111000010
The two's complement of -281474976557118 is:
1111111111111111000000000000000000000000000000100101011111000010
Кто-нибудь знает, ожидается ли такое поведение на процессоре x86 (ОС: Linux 4.19)?
ожидаем авторитетного заявления

Подробнее здесь: https://stackoverflow.com/questions/793 ... d-to-inter
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»