Очень приятно, что этот метеорит упал в России. Неприятно, что наши геологи, найдя его, невдуплили что это такое, а разобрался только иностранный товарищ.
Кстати, у «ведущего российского специалиста» на последней фотографии выражение лица такое, будто этот метеорит ему на голову упал :)
Я пробовал аналогичную диагностику в Clang на одном большом проекте. Результат — 0 ложных срабатываний, поймано 3 бага типа ужас-ужас. Наверное, дело в том, что там COM не используется ;)
Вы меня неправильно поняли. Я отвечал на утверждение что в gcc для ARM backtrace() не работает.
Работает. И в весьма древнем GCC.
А символов нет потому что я backtrace_symbols() не вызываю :) Если вызвать — появятся. Конечно, придется добавить что-то вроде -rdynamic, чтобы нужные символы оказались в динамической таблице.
Так в этом и есть весь смысл volatile — сказать компилятору, чтобы с этой переменной он не умничал :) Он не способен, не будет и не имеет права догадываться что там на самом деле за память.
1.9.7:
Accessing an object designated by a volatile lvalue (3.10), modifying an object, calling a library I/O function, or
calling a function that does any of those operations are all side effects, which are changes in the state of the execution
environment. Evaluation of an expression might produce side effects. At certain specified points in the execution sequence called sequence points, all side effects of previous evaluations shall be complete and no side effects of subsequent
evaluations shall have taken place.
Sequence point имеется после каждого statement.
Семантики с точки зрения видимости в других потоках у volatile может не быть, но точно есть семантика с точки зрения видимости железом. Он вообще изначально вводился для работы с портами ввода-вывода и подобными вещами, где каждая операция над ячейкой памяти наблюдается кем-то со стороны и может быть проинтерпретирована как угодно. Поэтому обращения к volatile переменным не могут быть склеены или переставлены _компилятором_ (процессором — могут быть переставлены, и поэтому он бесполезен для синхронизации потоков).
Нет никакого байткода. В NaCl — ограниченное подмножество x86 инструкций, причем ограниченное очень тривиально => весьма простой и очевидно корректный валидатор.
Странно, что в статье совсем не учитывается тот факт, что большинство операций записи — асинхронные, а большинство операций чтения — синхронные. И пользователь замечает задержку именно на операциях чтения. Запись, тем более маленькими 4k блоками (их не может быть _очень_ много, иначе HDD бы просто умер) легко ляжет в кеш и размажется по времени так что вы заметите только помигивание лампочки диска, и все.
Вроде все нормально, поисковик понял что это одно слово, просто чуть переупорядочил выдачу в пользу той формы, которая дана в запросе. Заговорил на языке пользователя :)
Если быстро несколько раз кликнуть по любой кнопке, счетчик ответов накручивается, а потом сайту начинает потихоньку сносить крышу )
Еще, изображение иероглифа появляются настолько медленно, что я начинаю пытаться его угадать по вариантам ответов. Хотя бы сделайте, чтобы кнопки с ответами не появлялись пока изображение не загрузится.
Кстати, у «ведущего российского специалиста» на последней фотографии выражение лица такое, будто этот метеорит ему на голову упал :)
Работает. И в весьма древнем GCC.
А символов нет потому что я backtrace_symbols() не вызываю :) Если вызвать — появятся. Конечно, придется добавить что-то вроде -rdynamic, чтобы нужные символы оказались в динамической таблице.
gcc version 4.3.2 (crosstool-NG-1.9.3)
#include <stdio.h>
#include <execinfo.h>
#include <inttypes.h>
void print_backtrace(void) {
void* buf[64];
int size = backtrace(buf, 64);
printf("backtrace(%d):\n", size);
for (int i = 0; i < size; ++i)
printf(" %lx\n", (unsigned long)buf[i]);
}
void f(void) {
print_backtrace();
}
int main(void) {
f();
return 0;
}
arm-unknown-linux-gnueabi-g++ zz.cc -o zz -O0 -march=armv7-a
backtrace(4):
84ec
8574
8588
4027cc3a
Accessing an object designated by a volatile lvalue (3.10), modifying an object, calling a library I/O function, or
calling a function that does any of those operations are all side effects, which are changes in the state of the execution
environment. Evaluation of an expression might produce side effects. At certain specified points in the execution sequence called sequence points, all side effects of previous evaluations shall be complete and no side effects of subsequent
evaluations shall have taken place.
Sequence point имеется после каждого statement.
Семантики с точки зрения видимости в других потоках у volatile может не быть, но точно есть семантика с точки зрения видимости железом. Он вообще изначально вводился для работы с портами ввода-вывода и подобными вещами, где каждая операция над ячейкой памяти наблюдается кем-то со стороны и может быть проинтерпретирована как угодно. Поэтому обращения к volatile переменным не могут быть склеены или переставлены _компилятором_ (процессором — могут быть переставлены, и поэтому он бесполезен для синхронизации потоков).
Кстати, это не байткод, а биткод :)
А теперь немного критики.
Если быстро несколько раз кликнуть по любой кнопке, счетчик ответов накручивается, а потом сайту начинает потихоньку сносить крышу )
Еще, изображение иероглифа появляются настолько медленно, что я начинаю пытаться его угадать по вариантам ответов. Хотя бы сделайте, чтобы кнопки с ответами не появлялись пока изображение не загрузится.