crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Использование ссылок или указателей или вообще без них, плюсы и минусы их использования
ViGOur
  опции профиля:
сообщение 27.2.2008, 21:35
Сообщение #1


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Сколько кода пересмотрел, код от кода разумеется различается, но заметил закономерность, используются в основном или ссылки или указатели, использование того и другого встречается редко.

1 вариант:
void function( const int &rn)
{
   ...
}

2 вариант:
void function( const int *pn)
{
   ...
}

3 вариант:
void function( const int n)
{
   ...
}


+ 1 и 2 вариант: экономия времени и памяти на копировании, в отличии от 3 варианта.
- 3 вариант значение копируется во временную переменную и занимает дополнительную память

p.s. затеял эту тему из-за интереса, сколько + и - наберем... :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Andrew Selivanov
  опции профиля:
сообщение 28.2.2008, 11:22
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 249
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 3

Спасибо сказали: 15 раз(а)




Репутация:   6  


Яркий пример работы оптимизатора GCC 3.4.5 (-O2):
#include <cstdio>

int function1( const int &rn)
{
    int temp = rn + 2;
    return temp;
}

int function2( const int *pn)
{
    int temp = (*pn) + 3;        
    return temp;
}

int function3( const int n)
{
    int temp = n + 4;
    return temp;
}

int main()
{
    int a = 4;
    int f1 = function1(a);
    int f2 = function2(&a);
    int f3 = function3(a);
    
    printf("%d", f1);
    printf("%d", f2);
    printf("%d", f3);    
    
    return 0;
}


И вот во что это в конечном счете соптимизировалось :)
mov     [esp+8+var_8], offset unk_403000
mov     ecx, 6
mov     [esp+8+var_4], ecx
call    printf
mov     [esp+8+var_8], offset unk_403000
mov     edx, 7
mov     [esp+8+var_4], edx
call    printf
mov     [esp+8+var_8], offset unk_403000
mov     eax, 8
mov     [esp+8+var_4], eax
call    printf
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- ViGOur   Использование ссылок или указателей или вообще без них   27.2.2008, 21:35
- - Litkevich Yuriy   да, интересно, учитывая что она const.   27.2.2008, 21:45
- - Andrew Selivanov   Цитата(ViGOur @ 27.2.2008, 21:35) Сколько...   28.2.2008, 10:41
- - Andrew Selivanov   Яркий пример работы оптимизатора GCC 3.4.5 (-O2): ...   28.2.2008, 11:22
- - ViGOur   - 1 и 2 варианты, в Qt, если невнимательно использ...   28.2.2008, 11:26
- - rich   Цитата(Andrew Selivanov @ 28.2.2008, 10:4...   15.3.2008, 18:45
- - 0xF   Цитатавнутренне(в компиляторе) ссылки могут реализ...   17.3.2008, 20:58
- - 0xF   Цитатаvoid function( const int &rn) void funct...   17.3.2008, 21:06
- - Litkevich Yuriy   если я правильнопонимаю Си, то ссылка и указатель ...   17.3.2008, 21:12
|- - Admin   Цитата(Litkevich Yuriy @ 17.3.2008, 21:12...   17.3.2008, 22:03
- - Litkevich Yuriy   как я понимаю x'у я имел ввиду следующий код: ...   17.3.2008, 22:11
- - Admin   Так не может быть, а так как я показал может быть,...   17.3.2008, 22:13
- - Litkevich Yuriy   в твоем примере она всегда инициализирована, нет м...   17.3.2008, 22:28
- - 0xF   Цитата(Litkevich Yuriy)если я правильнопонимаю Си,...   17.3.2008, 23:28
|- - Tonal   Цитата(0xF @ 18.3.2008, 2:28) Во-вторых, ...   18.3.2008, 8:45
- - Litkevich Yuriy   Цитатадаже не соберется я его для того и привел, ...   17.3.2008, 23:33
- - Novak   Имхо, может по сути ссылки и указатели близки. Но ...   17.3.2008, 23:40
- - Tonal   Собственно, кардинальное различие в том, что указа...   18.3.2008, 8:49


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 28.6.2025, 15:20