Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> (x ? thinLess:0.0f), что проделывает? 
:(
    Опции темы
Rickert
Дата 4.5.2008, 05:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 0
Всего: 52



Конструкция типа (x ? thinLess:0.0f) - во что она преобразуется?
Допустим у меня такой код:
Код
 for (int i = 0; i < 1000; ++i)
{
  x += (xx ? thinLess:0.0f);
  z += (zz ? 0.0f:thinLess);
}

Что будет быстрее он или:
Код

int xp = (xx ? thinLess:0.0f);
int zp = (zz ? 0.0f:thinLess);
for (int i = 0; i < 1000; ++i)
{
  x += xp;
  z += zp;
}



Это сообщение отредактировал(а) Rickert - 4.5.2008, 05:12


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
t_gran
Дата 4.5.2008, 06:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 621
Регистрация: 13.11.2007
Где: г.Усть-Илимск

Репутация: 1
Всего: 37



GCC при оптимизации 2 (-02) генерирует один и тот же код
Код

    .text
    .p2align 2,,3
.globl main
    .type    main, @function
main:
    pushl    %ebp
    movl    %esp, %ebp
    subl    $8, %esp
    andl    $-16, %esp
    subl    $16, %esp
    movl    $999, %eax
    .p2align 2,,3
.L9:
    decl    %eax
    jns    .L9
    xorl    %eax, %eax
    leave
    ret
    .size    main, .-main
    .ident    "GCC: (GNU) 3.4.4 [FreeBSD] 20050518"

Но если без оптимизации, то сам посмотри, что добавляется ещё одна метка. smile

1-ый вариант
Код

    .file    "1.c"
    .text
    .p2align 2,,3
.globl main
    .type    main, @function
main:
    pushl    %ebp
    movl    %esp, %ebp
    subl    $72, %esp
    andl    $-16, %esp
    movl    $0, %eax
    addl    $15, %eax
    addl    $15, %eax
    shrl    $4, %eax
    sall    $4, %eax
    subl    %eax, %esp
    movl    $-1717986918, %eax
    movl    $1069128089, %edx
    movl    %eax, -8(%ebp)
    movl    %edx, -4(%ebp)
    movl    $0, -28(%ebp)
.L2:
    cmpl    $999, -28(%ebp)
    jg    .L3
    fildl    -20(%ebp)
    fstpl    -48(%ebp)
    cmpl    $0, -12(%ebp)
    je    .L5
    fldl    -48(%ebp)
    faddl    -8(%ebp)
    fnstcw    -30(%ebp)
    movw    -30(%ebp), %ax
    movb    $12, %ah
    movw    %ax, -32(%ebp)
    fldcw    -32(%ebp)
    fistpl    -52(%ebp)
    fldcw    -30(%ebp)
    jmp    .L6
.L5:
    fldz
    faddl    -48(%ebp)
    fnstcw    -30(%ebp)
    movw    -30(%ebp), %ax
    movb    $12, %ah
    movw    %ax, -32(%ebp)
    fldcw    -32(%ebp)
    fistpl    -52(%ebp)
    fldcw    -30(%ebp)
.L6:
    movl    -52(%ebp), %eax
    movl    %eax, -20(%ebp)
    fildl    -24(%ebp)
    fstpl    -64(%ebp)
    cmpl    $0, -16(%ebp)
    jne    .L7
    fldl    -64(%ebp)
    faddl    -8(%ebp)
    fldcw    -32(%ebp)
    fistpl    -68(%ebp)
    fldcw    -30(%ebp)
    jmp    .L8
.L7:
    fldz
    faddl    -64(%ebp)
    fldcw    -32(%ebp)
    fistpl    -68(%ebp)
    fldcw    -30(%ebp)
.L8:
    movl    -68(%ebp), %eax
    movl    %eax, -24(%ebp)
    leal    -28(%ebp), %eax
    incl    (%eax)
    jmp    .L2
.L3:
    movl    $0, %eax
    leave
    ret
    .size    main, .-main
    .ident    "GCC: (GNU) 3.4.4 [FreeBSD] 20050518"


2-ой вариант
Код

    .file    "2.c"
    .text
    .p2align 2,,3
.globl main
    .type    main, @function
main:
    pushl    %ebp
    movl    %esp, %ebp
    subl    $56, %esp
    andl    $-16, %esp
    movl    $0, %eax
    addl    $15, %eax
    addl    $15, %eax
    shrl    $4, %eax
    sall    $4, %eax
    subl    %eax, %esp
    movl    $-1717986918, %eax
    movl    $1069128089, %edx
    movl    %eax, -8(%ebp)
    movl    %edx, -4(%ebp)
    cmpl    $0, -12(%ebp)
    je    .L2
    fldl    -8(%ebp)
    fnstcw    -38(%ebp)
    movw    -38(%ebp), %ax
    movb    $12, %ah
    movw    %ax, -40(%ebp)
    fldcw    -40(%ebp)
    fistpl    -48(%ebp)
    fldcw    -38(%ebp)
    jmp    .L3
.L2:
    movl    $0, -48(%ebp)
.L3:
    movl    -48(%ebp), %eax
    movl    %eax, -32(%ebp)
    cmpl    $0, -16(%ebp)
    jne    .L4
    fldl    -8(%ebp)
    fnstcw    -38(%ebp)
    movw    -38(%ebp), %ax
    movb    $12, %ah
    movw    %ax, -40(%ebp)
    fldcw    -40(%ebp)
    fistpl    -52(%ebp)
    fldcw    -38(%ebp)
    jmp    .L5
.L4:
    movl    $0, -52(%ebp)
.L5:
    movl    -52(%ebp), %eax
    movl    %eax, -36(%ebp)
    movl    $0, -28(%ebp)
.L6:
    cmpl    $999, -28(%ebp)
    jg    .L7
    movl    -32(%ebp), %edx
    leal    -20(%ebp), %eax
    addl    %edx, (%eax)
    movl    -36(%ebp), %edx
    leal    -24(%ebp), %eax
    addl    %edx, (%eax)
    leal    -28(%ebp), %eax
    incl    (%eax)
    jmp    .L6
.L7:
    movl    $0, %eax
    leave
    ret
    .size    main, .-main
    .ident    "GCC: (GNU) 3.4.4 [FreeBSD] 20050518"



Добавлено через 4 минуты и 12 секунд
Естественно это сильно от компилятора зависит smile


--------------------
Я знаю, что ничего не знаю© Сократ
user posted image
PM MAIL WWW   Вверх
JackYF
Дата 4.5.2008, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Логично, что всё, что не зависит от переменной цикла, лучше выносить за пределы этого самого цикла.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Rickert
Дата 4.5.2008, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 0
Всего: 52



Подожду ещё мнений.
Работаю на VS.
Спасибо!

Это сообщение отредактировал(а) Rickert - 4.5.2008, 20:10


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
bsa
Дата 5.5.2008, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Rickert, а чего их ждать? есть понятия оптимизация и пессимизация. И если оптимизация вредна только преждевременная, то пессимизация, на мой взгляд, вредна любая необоснованная. У тебя в первом примере именно пессимизация кода. Хорошо, если компилятор умный и может исправить твой косяк, но если это не так? Да и читабельность кода тот подход только понизил, на мой взгляд.
PM   Вверх
mes
Дата 5.5.2008, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(bsa @  5.5.2008,  11:20 Найти цитируемый пост)
есть понятия оптимизация и пессимизация. 

 smile 
Но я заметил странное явление  - о пессимизации говорят редко. Всегда пугают лишь преждевременной оптимизацией,
 узнав о вреде которой люди начинают специально писать пессимизировано.

Но на самом деле в коде надо избегать не пессимизацию и оптимизацию, а неясность и двусмысленность кода.
А если быть точнее, то надо просто стараться выразиться ясней и понятней , и тогда не придется ничего избегать. ))






--------------------
PM MAIL WWW   Вверх
bsa
Дата 5.5.2008, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(mes @ 5.5.2008,  19:20)
Но на самом деле в коде надо избегать не пессимизацию и оптимизацию, а неясность и двусмысленность кода.
А если быть точнее, то надо просто стараться выразиться ясней и понятней , и тогда не придется ничего избегать. ))

Преждевременная оптимизация лежит на повержности. И руки тянутся ее сделать, особенно, у программистов, которые имеют небольшой опыт.
С пессимизацией сложнее. Думаю, на нее напарываются только новички или "программисты", которые пишут не думая о том, что они пишут.
PM   Вверх
Rickert
Дата 6.5.2008, 07:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 0
Всего: 52



Да мне пофиг на то, как какому будет читать мой код, у меня другой вопрос: что работает быстрее? Судя по дизасму одинаково.



--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
vinter
Дата 6.5.2008, 08:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Цитата(Rickert @  6.5.2008,  08:00 Найти цитируемый пост)
Да мне пофиг на то, как какому будет читать мой код,

очень плохо, если не изменишь свое мнение то врядли работу себе нормальную найдешь...
Цитата(Rickert @  6.5.2008,  08:00 Найти цитируемый пост)
что работает быстрее?

ясен пень одинаково, ты приведи пример еще поэлементарней, для чего компиляторы улучшают? чтобы оптимизировали лучше smile


--------------------
Мой блог
PM MAIL WWW   Вверх
bsa
Дата 6.5.2008, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(Rickert @ 6.5.2008,  07:00)
Да мне пофиг на то, как какому будет читать мой код

Почитай умные книжки.
Только что, ты сказал полную противоположность тому, что есть на самом деле. Ты не только выразил неуважение к другим программистам, но и к себе в первую очередь, так как этот код ты будешь читать сам через пол года с воплями: "Кто так пишет?!?".
PM   Вверх
mes
Дата 6.5.2008, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Rickert @  6.5.2008,  07:00 Найти цитируемый пост)
Да мне пофиг на то, как какому будет читать мой код, 

я так понял, что это высказывание относится к фразе 
Цитата(mes @  5.5.2008,  19:20 Найти цитируемый пост)
надо просто стараться выразиться ясней и понятней 

Она НЕ означает,  что надо писать программу так чтоб понял стороний наблюдатель.

Программированние это творческий процесс передачи своей мысли компьютеру.
 И от того насколько граммотно ты выразишь ее (мысль),  
    настолько хорошо будет соответсвовать работа программы твоему представлению 
   и соответственно настолько сильно будет твое удовлетворение 







--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1087 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.