История изменений
Исправление shdown, (текущая версия) :
Всё равно не понимаю, как это связано с выравниванием, хоть убей.
Хорошо, давай попробуем сократовский диалог и наскальные рисунки.
char buf[128] = {0};
int *a = (int *) buf;
int *b = (int *) (buf + 1);
↓
[ 0 0 0 0 0 0 ... ]
^^^^^^^^^^^^^^^^ ↑
a ↑ ↑
^^^^^^^^^^^^^^^^
b
Мы присваиваем *a=1:
[ 1 0 0 0 0 0 ... ]
^^^^^^^^^^^^^^^^ ↑
a ↑ ↑
^^^^^^^^^^^^^^^^
b
Мы присваиваем *b=1:
[ 1 1 0 0 0 0 ... ]
^^^^^^^^^^^^^^^^ ↑
a ↑ ↑
^^^^^^^^^^^^^^^^
b
Мы читаем *a:
[ 1 1 0 0 0 0 ... ]
^^^^^^^^^^^^^^^^
a
Какую именно оптимизацию, по-твоему, убирает твой volatile?
Исходная версия shdown, :
Всё равно не понимаю, как это связано с выравниванием, хоть убей.
Хорошо, давай попробуем сократовский диалог и наскальные рисунки.
char buf[128] = {0};
int *a = (int *) buf;
int *b = (int *) (buf + 1);
↓
[ 0 0 0 0 0 0 ... ]
^^^^^^^^^^^^^^^^ ↑
a ↑ ↑
^^^^^^^^^^^^^^^^
b
Мы присваиваем *a=1:
[ 1 0 0 0 0 0 ... ]
^^^^^^^^^^^^^^^^ ↑
a ↑ ↑
^^^^^^^^^^^^^^^^
b
Мы присваиваем *b=1:
[ 1 1 0 0 0 0 ... ]
^^^^^^^^^^^^^^^^ ↑
a ↑ ↑
^^^^^^^^^^^^^^^^
b
Мы читаем *a:
[ 1 1 0 0 0 0 ... ]
^^^^^^^^^^^^^^^^
a