powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / ААААА!!! Вы это видели???
18 сообщений из 18, страница 1 из 1
ААААА!!! Вы это видели???
    #34902979
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
ААААА!!! Вы это видели???
    #34903034
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо так понимать, что надо учить Il ассемблер? и проверять, чего оно там накомпилило?


Море излечило меня от Джихада...(с)
...
Рейтинг: 0 / 0
ААААА!!! Вы это видели???
    #34903242
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmo http://gcc.gnu.org/ml/gcc/2007-10/msg00266.html
жесть.И что тебя так развеселило?
...
Рейтинг: 0 / 0
ААААА!!! Вы это видели???
    #34903619
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оптимизации зло?
...
Рейтинг: 0 / 0
ААААА!!! Вы это видели???
    #34903696
teras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akh wrote:
> Оптимизации зло?

Причем тут оптимизации? Дело в программистах.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
ААААА!!! Вы это видели???
    #34903718
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
terasПричем тут оптимизации? Дело в программистах.

Я бы не был сразу так катигоричен.
...
Рейтинг: 0 / 0
ААААА!!! Вы это видели???
    #34903745
teras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akh wrote:
> teras
> Причем тут оптимизации? Дело в программистах.
>
>
> Я бы не был сразу так катигоричен.

Почему? Программисты вообще склонны считать свои ошибки глюками
компилятора. А после исправления ошибки в этой программе gcc генерирует
вполне ожидаемый код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
_f:
	pushl	%ebp
	movl	%esp, %ebp
	cmpl	$ 0 ,  8 (%ebp)
	je	L1
	movl	$ 1 , _v
L1:
	popl	%ebp
	ret

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
ААААА!!! Вы это видели???
    #34903756
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teras
Почему? Программисты вообще склонны считать свои ошибки глюками
компилятора. А после исправления ошибки в этой программе gcc генерирует
вполне ожидаемый код:

Каков код Си без ошибки?
...
Рейтинг: 0 / 0
ААААА!!! Вы это видели???
    #34903778
teras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akh wrote:
> Автор: "Akh"
> teras
>
> Почему? Программисты вообще склонны считать свои ошибки глюками
> компилятора. А после исправления ошибки в этой программе gcc генерирует
> вполне ожидаемый код:
>
>
>
> Каков код Си без ошибки?

Код: plaintext
extern volatile int v;\n\nvoid\nf(int set_v)\n{\n  if (set_v)\n    v =  1 ;\n}

An object that has volatile-qualified type may be modified in ways
unknown to the implementation or have other unknown side effects.
Therefore any expression referring to such an object shall be evaluated
strictly according to the rules of the abstract machine, as described in
5.1.2.3. Furthermore, at every sequence point the value last stored in
the object shall agree with that prescribed by the abstract machine,
except as modified by the unknown factors mentioned previously. What
constitutes an access to an object that has volatile-qualified type is
implementation-defined.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
ААААА!!! Вы это видели???
    #34903818
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teras
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
extern volatile int v;

void
f(int set_v)
{
  if (set_v)
    v =  1 ;
}

An object that has volatile-qualified type may be modified in ways
unknown to the implementation or have other unknown side effects.
Therefore any expression referring to such an object shall be evaluated
strictly according to the rules of the abstract machine, as described in
5.1.2.3. Furthermore, at every sequence point the value last stored in
the object shall agree with that prescribed by the abstract machine,
except as modified by the unknown factors mentioned previously. What
constitutes an access to an object that has volatile-qualified type is
implementation-defined.
Posted via ActualForum NNTP Server 1.4

Здесь, под неизвесными реализации факторами измения переменной понимается, в основном изменения данных, например, системой (таймер какой-нибудь) или другими программами, а не самой программой. Если так мыслить, то все объекты, используемые несколькими потоками надо будет специфицировать volatile.
...
Рейтинг: 0 / 0
ААААА!!! Вы это видели???
    #34903869
teras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akh wrote:
>
>
> Здесь, под неизвесными реализации факторами измения переменной
> понимается, в основном изменения данных, например, системой (таймер
> какой-нибудь) или другими программами, а не самой программой. Если так
> мыслить, то все объекты, используемые несколькими потоками надо будет
> специфицировать volatile.

Обязательно, если не можете обеспечить защищенность от побочных
модификаций другими способами, в противном случае компилятор генерирует
эквивалентный код, которй далеко не всегда работает в потоках. Под side
effect понимается *любое* изменение данных помимо вне указанного
контекста. В частности и таймер, и система, и другие потоки. По той
причине, что взаимодействие, или даже наличие, потоков просто не
оговаривается в стандарте.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
ААААА!!! Вы это видели???
    #34903890
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlИ что тебя так развеселило?безусловная запись.

Ожидаемое поведение – генерация кода с джампом. А тут такой перл.
...
Рейтинг: 0 / 0
ААААА!!! Вы это видели???
    #34904014
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teras
Обязательно, если не можете обеспечить защищенность от побочных
модификаций другими способами, в противном случае компилятор генерирует
эквивалентный код, которй далеко не всегда работает в потоках. Под side
effect понимается *любое* изменение данных помимо вне указанного
контекста. В частности и таймер, и система, и другие потоки. По той
причине, что взаимодействие, или даже наличие, потоков просто не
оговаривается в стандарте.


Не, знаю, все как-то не явно. Нашел про volatile здесь .

Во всяком случае, мой 3.3.3 компилирует одинаково нормально в обоих случаях.
...
Рейтинг: 0 / 0
ААААА!!! Вы это видели???
    #34905204
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поигрался с этим исходником, и так и не смог повторить описаный глюк.
Пробовал в С и С++ режимах в 3.4.2 на Win x86 и в 4.1.2 на AIX.
Кто сумел получить "безусловную запись"? Похвастайтесь своей версией компилятора и платформой.
...
Рейтинг: 0 / 0
ААААА!!! Вы это видели???
    #34905212
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
возможно, нужен 4.* на х86
...
Рейтинг: 0 / 0
ААААА!!! Вы это видели???
    #34905333
teras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akh wrote:
>
> Не, знаю, все как-то не явно. Нашел про volatile здесь
> <http://www.find-info.ru/doc/cpp/002/volatile.htm>.

Непонятно, откуда документация. Подозреваю, что ноги у нее растут еще из
MSDOS. Почитай что-нибудь посвежее, например для MSVC:

The volatile type qualifier declares an item whose value can
legitimately be changed by something beyond the control of the program
in which it appears, such as a *concurrently executing thread*.

> Во всяком случае, мой 3.3.3 компилирует одинаково нормально в обоих случаях.

У меня mingw 3.4, а компилировать нужно для i686 (до него cmov просто не
поддерживался):

gcc -O1 -march=i683
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
ААААА!!! Вы это видели???
    #34905401
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
terasа компилировать нужно для i686 (до него cmov просто не поддерживался):
gcc -O1 -march=i683О! Точно.
Но на мой взгляд это не очень страшный глюк. Во первых, в исходнике действительно должно стоять volatile. Во вторых, этот глюк появляется только на одной единственной платформе...
...
Рейтинг: 0 / 0
ААААА!!! Вы это видели???
    #34905541
teras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl wrote:
> teras
> а компилировать нужно для i686 (до него cmov просто не поддерживался):
> gcc -O1 -march=i683
>
> О! Точно.
> Но на мой взгляд это не очень страшный глюк. Во первых, в исходнике
> действительно должно стоять volatile. Во вторых, этот глюк появляется
> только на одной единственной платформе...

И в третих - это и не глюк вовсе... ;-)

Кстати, достаточно i686 популярная платформа сейчас. Под i[345]83 смысла
особого компилировать нет - таких машин уже не найдешь. Я, как поставил
gentoo года два назад, так сразу и включил i686. Работает. И с gcc 3.x и
с gcc 4.x.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / ААААА!!! Вы это видели???
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]