[ C / C++ ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. rudvil

    rudvil Elder - Старейшина

    Joined:
    25 Aug 2008
    Messages:
    200
    Likes Received:
    29
    Reputations:
    0
    Есть ли смысл для оптимизации, передавать аргументы функции через указатель, например
    Code:
    void show_msg(std::string& msg) {
      std::cout << msg;
    }
    если учитывать что эта функция вызывается очень часто и с средним кол. символов в "msg" - 500
    Т.е. насколько я понимаю если не передавать через указатель, то при каждом вызове будет происходить копия этого "msg" и последующий его вывод... что мне впринципе нафиг не надо, тогда уже лучше везде прописывать аргументы через ссылки.
    Ну не везде, но во всяком случае там - где я точно знаю что в функ. с ним никаких операция кроме чтения не будет.
    Есть ли смысл с этим заморачиваться?
     
    #5261 rudvil, 24 May 2010
    Last edited: 24 May 2010
  2. Byte_

    Byte_ Elder - Старейшина

    Joined:
    7 Sep 2008
    Messages:
    143
    Likes Received:
    34
    Reputations:
    2
    на сколько я понимаю, тут выгоднее написать
    Code:
    inline void show_msg(std::string msg) {std::cout << msg;}
     
    1 person likes this.
  3. rudvil

    rudvil Elder - Старейшина

    Joined:
    25 Aug 2008
    Messages:
    200
    Likes Received:
    29
    Reputations:
    0
    Да, спасибо это вариант, но ведь копирование аргумента по прежнему будет?
     
  4. Byte_

    Byte_ Elder - Старейшина

    Joined:
    7 Sep 2008
    Messages:
    143
    Likes Received:
    34
    Reputations:
    2
    если я правильно понимаю механизм inline функций в C, то нет... в такой функции тело заменяет вызов при компиляции. но следует учесть, что inline может быть не воспринят компилятором (это рекомендация а не условия для компилятора).
     
  5. rudvil

    rudvil Elder - Старейшина

    Joined:
    25 Aug 2008
    Messages:
    200
    Likes Received:
    29
    Reputations:
    0
    Хмм, ещё раз спасибо - попробую и так - и так, проведу пару тестов, посмотрим где компилятору(в плане оптимизации) больше понравится =]
     
  6. Byte_

    Byte_ Elder - Старейшина

    Joined:
    7 Sep 2008
    Messages:
    143
    Likes Received:
    34
    Reputations:
    2
    напиши потом. заинтриговал =)
     
  7. rudvil

    rudvil Elder - Старейшина

    Joined:
    25 Aug 2008
    Messages:
    200
    Likes Received:
    29
    Reputations:
    0
    Забавно получилось, как говорится не знаешь не трогай ^^
    результаты в мс.
    Вывод следующий - с такой мелкой оптимизации смысла нет заморачиваться, компилятор всё сделает за тебя.
     
  8. Byte_

    Byte_ Elder - Старейшина

    Joined:
    7 Sep 2008
    Messages:
    143
    Likes Received:
    34
    Reputations:
    2
    rudvil, скорее всего он не воспринял inline из-за использования std...
    судя по всему способ 1 = способу 3
     
  9. rudvil

    rudvil Elder - Старейшина

    Joined:
    25 Aug 2008
    Messages:
    200
    Likes Received:
    29
    Reputations:
    0
    Как бы там ни было если уж оптимизировать, то оптимизировать нужно скорее общий алгоритм программы, чем всякую мелочь =]
     
  10. STLcRash

    STLcRash New Member

    Joined:
    4 Jun 2009
    Messages:
    39
    Likes Received:
    0
    Reputations:
    0
    подскажите как после очистки кэша IE
    добавить в уже отчищенный кэш куки из edit1.text
     
  11. BrainDeaD

    BrainDeaD Elder - Старейшина

    Joined:
    9 Jun 2005
    Messages:
    774
    Likes Received:
    292
    Reputations:
    214
    чувак, это ж не с/с++. ты либо темой ошибся, либо языком.
    cookie записываются в файл. для этого тебе надо знать содержание и место хранения cookies.
     
  12. _iks_

    _iks_ Member

    Joined:
    21 Feb 2009
    Messages:
    60
    Likes Received:
    59
    Reputations:
    61
    Какой оператор вычисляет целую часть от деления(с++)? По типу div в Паскале надо.

    Спасибо.
     
    #5272 _iks_, 24 May 2010
    Last edited: 24 May 2010
  13. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    Инлайн-подставка применяется к очень маленьким функциям. При использовании инлайн-подставки компилятор будет генеририровать для функции соответствующий код в месте ее вызова. Это увеличит скорость вызова функции, но не избавит от затрат на копирование.

    Что-то новое...
     
  14. Meecript_

    Meecript_ Banned

    Joined:
    29 Oct 2008
    Messages:
    194
    Likes Received:
    62
    Reputations:
    32
    int a = 10; int b = 4; int c = a/b;
    c == 2
     
  15. Meecript_

    Meecript_ Banned

    Joined:
    29 Oct 2008
    Messages:
    194
    Likes Received:
    62
    Reputations:
    32
    выгоднее написать
    Code:
    #define show_msg(s) std::cout << s
     
  16. .::f-duck::.

    .::f-duck::. Member

    Joined:
    30 May 2009
    Messages:
    343
    Likes Received:
    32
    Reputations:
    7
    1.Как обозначить двоичную систему в С++?
    2.Как получить доступ к n члену переменной типа int (C++)?
     
  17. Irdis

    Irdis Elder - Старейшина

    Joined:
    6 Feb 2006
    Messages:
    248
    Likes Received:
    52
    Reputations:
    3
    1 bool
    2 вы про что?
     
  18. .::f-duck::.

    .::f-duck::. Member

    Joined:
    30 May 2009
    Messages:
    343
    Likes Received:
    32
    Reputations:
    7
    Ну,например,есть переменная:

    int one = 1000;

    Как вывести,скажем, 2 член?
    Было бы это char, то cout << one[2];
     
  19. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    Возможно вы имели в виду получение доступа к N'ому элементу массива?

    Тогда проще быть не может:

    int arrayNumbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

    На пример получить доступ к первому элементу массива можно следующим образом:

    arrayNumbers[ 0 ];

    0 - потому что массив индексируются начиная с нуля.

    UPD:

    Code:
    int var = 1000;
    
    int var1 = var % 10; // Это последнее число - 0.
    int var2 = var % 100; // предпоследнее - 0.
    int var3 = var % 1000; // второе - 0.
    int var4 = var % 10000; // первое - 1.
    Но это изврат ,)
     
    #5279 Ins3t, 24 May 2010
    Last edited: 24 May 2010
  20. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    M_script_
    отнюдь не выгоднее, и банально неправильно. это си стайл. не юзают с плюсами. правильно юзать инлайн меотды.
     
Thread Status:
Not open for further replies.