C ++ изменчивый объект, построенный с размещением new - PullRequest
1 голос
/ 07 февраля 2020

Я использую размещение new для создания объекта, который живет где-то в памяти (например, отображение ввода-вывода в памяти):

struct alignas(16) A
{
    std::uint32_t m_i;
};

...

A* pA = new (memArena) A();

В моем коде потребителя у меня есть несколько веток на m_i. Правильно ли я считаю, что он должен быть помечен как volatile, иначе компилятор может сохранить его в регистре, и ветвь проверит этот регистр вместо значения, хранящегося в памяти?

На данный момент я не надену он не помечен как volatile, но использует забор компилятора, такой как asm volatile("" : : "i,r,m"(m_i) : "memory");, этого достаточно?

Меня интересует только x86, а не любая другая архитектура. Кроме того, есть один процесс, пишущий в эту область памяти, и другой, потребляющий, но мой вопрос не о проблемах параллелизма, а только о потенциальных ошибках, возникающих из-за оптимизаций моего компилятора.

Edit : исправлено размещение нового синтаксиса, изменено class на struct

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...