Автор Тема: Трюки, приемы программирования  (Прочитано 23209 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн de666

  • Губернский секретарь
  • **
  • Сообщений: 41
  • Репутация: 0
  • Пол: Мужской
Re: Трюки, приемы программирования
« Ответ #15 : јРав 31, 2007, 02:31:05 pm »
еще раз попытаюсь сказать чего я хочу
Код: (cpp) [Выделить]
...
vector<double> v(n);//n определяетца во время выполнения
...
{
    const int a = v.size()/2 - 1;
    for (size_t i = 0; i<a; i++)
    {/*code_here*/}
}
...
a по определению не может быть определена во время компиляции поэтому для этой константы будет выделено место в стэке но она мне нужна только в одном месте кода

beholder

  • Гость
Re: Трюки, приемы программирования
« Ответ #16 : јРав 31, 2007, 04:07:59 pm »
как я понял в ск5обки ты заключил чтобы ограничить область видимости? тогда это ужасное решение.
лучше так
Код: (cpp) [Выделить]
const int *a = new int(v.size()/2 - 1);
..........
delete a;
Цитировать
имелось ввиду что нужно написать функцию которую я буду часто использовать вдальнейшем и которая должна быть легко настраиваема
в обоих случаях можно будет вызывать функцию как func(че то там) но при использовании объекта класса настройка помоему более удобна и наглядна: func.property(аргумент)
во втором же случае ее можно будет настроить примерно так: func_properties.property(аргумент)
вааааааабще ниче не понял изъясняйсе проще, не надо писать кучу текста, пиши я хочу чтобы было так, и вот как я предлагаю:..
потомучто непонятно что-ты сравниваешь, один класс функтор, другой нет как тут можно о чем то судить??
Цитировать
По поводу 2го вопроса: если речь идет о константе, то, как вариант, можно определить ее макросом
макрос - зло, лучше их не юзать.

Оффлайн de666

  • Губернский секретарь
  • **
  • Сообщений: 41
  • Репутация: 0
  • Пол: Мужской
Re: Трюки, приемы программирования
« Ответ #17 : јРав 31, 2007, 06:35:32 pm »
через кучу это не смешно
и будет у меня в стэке болтатца указатель который занимает столько сколько size_t да еще в куче int
тогда легче просто инт объявить
по поводу ужасного решения есть еще мнения?

если сравнивать "класс функтор" (вот как оказываетца это называетца) и связку функция + класс-утилита то что по вашему лучше?
« Последнее редактирование: јРав 31, 2007, 06:39:17 pm от de666 »

beholder

  • Гость
Re: Трюки, приемы программирования
« Ответ #18 : јРав 31, 2007, 11:06:21 pm »
Цитировать
через кучу это не смешно
и будет у меня в стэке болтатца указатель который занимает столько сколько size_t да еще в куче int
пипец.. ты че до сих пор программируешь в одном 64К сегменте?? для кого расширяли адресное пространство?если ты за каждые 4 байта трясешься, то удачи тебе в программированиии на ЯВУ, тут тебя ждет много сюрпризов :wink3:
Цитировать
если сравнивать "класс функтор" (вот как оказываетца это называетца) и связку функция + класс-утилита то что по вашему лучше?
функтор нужен только там, где он нужен, в противном случае он не нужен.т.е сначала надо знать твою конечную цель.

Оффлайн TERRAPOD

  • Действительный статский советник
  • *****
  • Сообщений: 1598
  • Репутация: 25
  • Пол: Мужской
  • Texas Hold'em Freak
  • SkypeID: Andrei Hes
Re: Трюки, приемы программирования
« Ответ #19 : јРав 31, 2007, 11:28:36 pm »
Надо всегда по обстоятельствам действовать  :nono:

Оффлайн de666

  • Губернский секретарь
  • **
  • Сообщений: 41
  • Репутация: 0
  • Пол: Мужской
Re: Трюки, приемы программирования
« Ответ #20 : °ЯаХЫм 01, 2007, 11:07:08 am »
пипец.. ты че до сих пор программируешь в одном 64К сегменте?? для кого расширяли адресное пространство?если ты за каждые 4 байта трясешься, то удачи тебе в программированиии на ЯВУ, тут тебя ждет много сюрпризов :wink3:

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

конечную цель я говорил: настройка некоторых параметров функции

beholder

  • Гость
Re: Трюки, приемы программирования
« Ответ #21 : °ЯаХЫм 01, 2007, 11:14:48 am »
Цитировать
к тому же я думаю быстродействие переменной стэка будет быстрее чем обращение по указателю
быстрее, но не намного.
Цитировать
конечную цель я говорил: настройка некоторых параметров функции
объясни получше, ато малопонятно:)

Оффлайн de666

  • Губернский секретарь
  • **
  • Сообщений: 41
  • Репутация: 0
  • Пол: Мужской
Re: Трюки, приемы программирования
« Ответ #22 : °ЯаХЫм 01, 2007, 01:29:13 pm »
а если код в который входит этот кусочек исполняетца 1000 раз (миллион раз?) думаю ждать лишнюю минуту будет обломно особенно если это можно предотвратить при написании кода
а если надо написать time-critical код?

про функтор и функцию
допустим надо численно минимизировать функцию эн переменных
но будет очень удобно если параметр точности вычисления можно будет менять и чтобы он имел значение по умолчанию
делать глобальную переменную к которой будет обращатца функция будет некрасиво значит надо спрятать ее в класс а функцию сделать другом
или сделать класс функтор

beholder

  • Гость
Re: Трюки, приемы программирования
« Ответ #23 : °ЯаХЫм 01, 2007, 02:12:39 pm »
Цитировать
а если код в который входит этот кусочек исполняетца 1000 раз (миллион раз?)
даже если будет исполнятся триллиард раз, он не увеличит время даже на 1 наносекунду..
по теме: с френдовой ф-ией некрасиво, так что лучше с функтором, а еще лучше придумать что-нить другое т.к не вижу смысло ни от того, ни от другого.
Почему бы функцию минимизатор не оставить простым методом класса?

Оффлайн de666

  • Губернский секретарь
  • **
  • Сообщений: 41
  • Репутация: 0
  • Пол: Мужской
Re: Трюки, приемы программирования
« Ответ #24 : °ЯаХЫм 01, 2007, 03:10:03 pm »
ладно впринципе вопрос исчерпал себя

ps
даже если будет исполнятся триллиард раз, он не увеличит время даже на 1 наносекунду..
...
Код: (cpp) [Выделить]
#include <iostream>
#include <ctime>

using namespace std;

void main()
{
    const int n = 10000000000;
    double v = 0.; //stack variable
    double *p = new double; //heap variable

    clock_t t0 = clock(), t1;
    for (size_t i = 0; i<n; ++i)
        ++v;
    t1 = clock();
    std::cout << ((t1 - t0)/CLOCKS_PER_SEC) << std::endl;
    std::cout << v << std::endl;

    *p = 0;
    t0 = clock();
    for (size_t i = 0; i<n; ++i)
        ++(*p);
    t1 = clock();
    std::cout << ((t1 - t0)/CLOCKS_PER_SEC) << std::endl;
    std::cout << *p << std::endl;
    delete p;
}
время выполнения 4 к 3 в пользу стэковой переменной
то же самое если указатель переделать на ссылку (что логично)
что я делаю неправильно?
« Последнее редактирование: °ЯаХЫм 01, 2007, 09:53:38 pm от de666 »

Оффлайн Адамантэус

  • Коллежский советник
  • *****
  • Сообщений: 725
  • Репутация: 24
  • Пол: Мужской
  • Телезритель
Re: Трюки, приемы программирования
« Ответ #25 : °ЯаХЫм 03, 2007, 10:40:10 am »
 Судя по постам вы сишники, обсуждающие аппаратную оптимизацию находящуюся в ведении ассемблеровцев.  Причём похоже пишите на борладнах, которые в общем-то не профессиональная система для системных программистов, а учебная и для прикладных. Могу поделится опытом :
1) скорость меряет профайлер и выдаёт "срез" времени выполнения по функциям, так что гадать сколько при каком количестве выполнений не нужно
2) есть счётчик  тактов который позволят выбрать оптимальный ассембреный код под отладчиком (если его выводить в отладочном режиме в строку)
3) размер конкретного кода сгенерированного компилятором можно определить по адресам между командами в отладчике, позволяющем просматривать ассемблерный код
4) если у вас нет таких возможностей то гадать какой ассемблерный код выдаст оптимизирующий компилятор просто бессмысленно :dash2:

beholder

  • Гость
Re: Трюки, приемы программирования
« Ответ #26 : °ЯаХЫм 03, 2007, 09:35:25 pm »
Цитировать
4) если у вас нет таких возможностей то гадать какой ассемблерный код выдаст оптимизирующий компилятор просто бессмысленно
вообще то в нормальных IDE есть дизассемблер :wink3:

Оффлайн Адамантэус

  • Коллежский советник
  • *****
  • Сообщений: 725
  • Репутация: 24
  • Пол: Мужской
  • Телезритель
Re: Трюки, приемы программирования
« Ответ #27 : °ЯаХЫм 05, 2007, 10:24:35 am »
 Тут на самом деле вопрос не в тривиальном дизассемблере, который иногда "отваливается" от строк исходного текста как у Борланд, а в ориентированности всей системы на профессиональную работу, и наличие соответсвующих средств оптимизации, которые делают всё с "вежливостью королей". :rtfm:

Оффлайн TERRAPOD

  • Действительный статский советник
  • *****
  • Сообщений: 1598
  • Репутация: 25
  • Пол: Мужской
  • Texas Hold'em Freak
  • SkypeID: Andrei Hes
Re: Трюки, приемы программирования
« Ответ #28 : °ЯаХЫм 11, 2007, 10:20:05 pm »
Хех, а как вам такой трюк? Всегда любил такие приколы :)

ЗЫ: фсьо бизапасна!

[вложение удалено Администратором]

beholder

  • Гость
Re: Трюки, приемы программирования
« Ответ #29 : °ЯаХЫм 12, 2007, 04:38:27 pm »
TERRAPOD, поясни, че то я прикола не понял :)