The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Рассматривается возможность перевода NTPsec на язык Rust или..."
Отправлено Ordu, 10-Янв-17 17:52 
> разыменование является значащей операцией

В C++ это значащая операция. Да и то не всегда. В C же разыменование не имеет побочных эффектов -- возможный кеш-промах, со всей последующей активностью процессора не в счёт. Разыменование может иметь побочные эффекты, если оно приводит к UB, например, в случае чтения из нулевого указателя. Но если оно приводит к UB, то компилятор волен действовать так, как ему заблагорассудится.

А чтобы не быть голословным, вот результат компиляции
$ cat tmp.c
void fn(int *p)
{
    int dead = *p;
    if(!p)
        return;
    *p = 4;
}
$ gcc -v
...
gcc version 4.9.4 (Gentoo 4.9.4 p1.0, pie-0.6.4)
$ gcc -Wall -O2 -S tmp.c
tmp.c: In function 'fn':
tmp.c:3:6: warning: unused variable 'dead' [-Wunused-variable]
  int dead = *p;
      ^
$ cat tmp.s
    .file    "tmp.c"
    .section    .text.unlikely,"ax",@progbits
.LCOLDB0:
    .text
.LHOTB0:
    .p2align 4,,15
    .globl    fn
    .type    fn, @function
fn:                                        ; <--- точка входа функции
.LFB0:
    .cfi_startproc
    testq    %rdi, %rdi         ; проверка на нуль
    je    .L1                           ; если нуль, то го на выход
    movl    $4, (%rdi)         ; иначе: *p = 4
.L1:
    rep ret                            ; собственно выход
    .cfi_endproc
.LFE0:
    .size    fn, .-fn
    .section    .text.unlikely
.LCOLDE0:
    .text
.LHOTE0:
    .ident    "GCC: (Gentoo 4.9.4 p1.0, pie-0.6.4) 4.9.4"
    .section    .note.GNU-stack,"",@progbits

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
  Введите код, изображенный на картинке: КОД
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру