LINUX.ORG.RU

История изменений

Исправление shdown, (текущая версия) :

У тебя есть фича в стандарте, которая запрещает компилятору делать оптимизации

Нет. Это нигде не написано в стандарте.

Были случаи, когда

int mul2(volatile int *p)
{
    return *p + *p;
}
компилировалось в
    mov (%rdi),%eax
    mov (%rdi),%eax
    shl $1,%eax
    ret
Было два чтения? Получи два чтения. Больше ничего не гарантируется.

То что POSIX там что-то свое про volatile думает, это его проблемы.

А POSIX тут при чём? Есть стандарт Си. POSIX не может ему противоречить, если что. POSIX ничего дополнительно про volatile не говорит, ЕМНИП.

Сигналы, sig_atomic_t и гарантии на volatile sig_atomic_t есть в стандарте Си.

Исправление shdown, :

У тебя есть фича в стандарте, которая запрещает компилятору делать оптимизации

Нет. Это нигде не написано в стандарте.

Были случаи, когда

int mul2(volatile int *p)
{
    return *p + *p;
}
компилировалось в
    mov (%rdi),%eax
    mov (%rdi),%eax
    shl $1,%eax
    ret
Было два чтения? Получи два чтения. Больше ничего не гарантируется.

То что POSIX там что-то свое про volatile думает, это его проблемы.

А POSIX тут при чём? Есть стандарт Си. POSIX не может ему противоречить, если что. POSIX ничего дополнительно про volatile не говорит, ЕМНИП.

Исходная версия shdown, :

У тебя есть фича в стандарте, которая запрещает компилятору делать оптимизации

Нет. Это нигде не написано в стандарте.

Были случаи, когда

int mul2(volatile int *p)
{
    return *p + *p;
}
компилировалось в
    mov (%rdi),%eax
    mov (%rdi),%eax
    shl $1,%eax
    ret
Было два чтения? Получи два чтения. Больше ничего не гарантируется.

То что POSIX там что-то свое про volatile думает, это его проблемы.

А POSIX тут причём? Есть стандарт Си. POSIX не может ему противоречить, если что. POSIX ничего дополнительно про volatile не говорит, ЕМНИП.