Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Как сделать компактный код ? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Напишите функцию сортировки, похожую на функцию которая использовалась для сортировки массивов, с той разницей, что ее а http://www.cyberforum.ru/cpp-beginners/thread1134806.html
Напишите функцию сортировки, похожую на функцию которая использовалась для сортировки массивов, с той разницей, что ее аргументом должен быть вектор, содержащий числа типа int, а не массив. Этой...
C++ Напишите программу, считывающую строку текста и заменяющую все четырехбуквенные слова словом "love" Напишите программу, считывающую строку текста и заменяющую все четырехбуквенные слова словом "love". Например, для входной строки I hate you, you dodo! программа должна вывести следующее: I love... http://www.cyberforum.ru/cpp-beginners/thread1134804.html
Форматный ввод/вывод: имя, второе имя или инициал, фамилия C++
Напишите программу, считывающую имя человека в таком формате: имя, второе имя или инициал, фамилия. Затем программа выводит имя в следующем формате: Фамилия. Имя Инициал. Например, для введенной...
C++ Решение системы нелинейных уравнений
найти решения уравнения графическим методом и методом поиска решений {cos(y+0,5)+x=0,8; { sinx-2y=1,6. P.S. только там скобка одна,общая
C++ Вместо массива выводит большие отрицательные чсила http://www.cyberforum.ru/cpp-beginners/thread1134774.html
Доброго времени суток! Создан массив в классе (вроде все верно) вот только выводит не тот массив который требуется: #include "stdafx.h" #include <iostream> #include <math.h> #include <time.h>...
C++ Ввод данных в List Добрый день! Только начал пытаться писать на c++. У меня есть простая задача ввода, обработки данных. У меня есть функция в которой я считаю количество элементов, которые меньше 5. Мне нужно как... подробнее

Показать сообщение отдельно
DrOffset
7138 / 4279 / 964
Регистрация: 30.01.2014
Сообщений: 7,067
31.03.2014, 16:28
Цитата Сообщение от Тамика Посмотреть сообщение
Экономия памяти. Вместо создания копий, туда придет именно переменная, которую передали в функцию.
Вот именно про такие мифы я и говорил.
Ведь никакой экономии здесь не будет. Возможно будет даже расход!
Давай разбираться. sizeof(int) на 32-битной x86 в win равен 4, sizeof(int*) тоже равен 4. Экономии нет. Зато добавляется (возможное) разыменование.
Однако на x64 - sizeof(int *) == 8, а sizeof(int) все еще 4. а вот и расход.
Но это все теория. А теперь к практике:
Рассмотрим такие варианты:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int test1(int a, int b)
{
    return a + b;
}
 
int test2(int const & a, int const & b)
{
    return a + b;
}
 
int main()
{
    test1(1, 2);
    test2(1, 2);
    return 0;
}
А вот что получилось:
Assembler
1
2
3
4
5
6
7
8
9
10
test1:
    mov eax, DWORD PTR [esp+8]
    add eax, DWORD PTR [esp+4]
    ret
test2:
    mov eax, DWORD PTR [esp+4]
    mov edx, DWORD PTR [esp+8]
    mov eax, DWORD PTR [eax]
    add eax, DWORD PTR [edx]
    ret
Что-то не очень похоже на экономию, правда? Ссылки имеют место только для сложных и тяжелых типов.

Добавлено через 6 минут
Добавлю еще, что я специально написал пример так, что запретить компилятору встраивать функции. Если бы он это сделал, то оба варианты были бы абсолютно одинаковы.
2
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru