0 / 0 / 1
Регистрация: 23.07.2016
Сообщений: 34
|
|||||||||||
1 | |||||||||||
Переменные или обращение к методам20.01.2017, 14:49. Показов 722. Ответов 10
Метки нет (Все метки)
Здравствуйте, хотелось бы узнать, что использовать лучше (и/или менее "памятезатратно") - обращение к методам или использование дополнительных переменных?
Например, необходимо использовать кол-во элементов в цикле:
Это просто примеры, чтобы было понятно. Хотелось бы узнать в общем.
0
|
20.01.2017, 14:49 | |
Ответы с готовыми решениями:
10
Локальные переменные или прямое обращение к get-объекта класса? Обращение к методам объекта по ссылке на объект Обращение к методам Обращение к методам класса |
331 / 283 / 78
Регистрация: 02.08.2016
Сообщений: 1,008
|
|
20.01.2017, 14:59 | 2 |
а где в вашем примере вызов метода?
0
|
0 / 0 / 1
Регистрация: 23.07.2016
Сообщений: 34
|
|
20.01.2017, 15:01 [ТС] | 3 |
mainList.Count - возвращает кол-во элементов списка (List Count)
Я имею в виду такие методы, которые уже есть, а не которые создаются пользователем.
0
|
148 / 118 / 37
Регистрация: 27.10.2011
Сообщений: 690
|
|
20.01.2017, 15:01 | 4 |
В вашем вопросе уже есть ответ - "дополнительные переменные" означают дополнительные расходы на память, не так ли?
Хотя в приведённом вами примере разницы, скорее всего, не будет вообще при использовании недопотопного компилятора. Во втором случае наверняка компилятор соптимизирует и положит x на регистр В первом поймёт что mainList.Count это константа, заинлайнит вызов метода и вынесет результат опять же на регистр Итого в обоих случаях потребуется один регистр на хранение размера mainList А ответа на вопрос что однозначно лучше, быть не может : 1. Слишком зависит от конкретной задачи 2. Насколько хорошо компилятор умеет оптимизировать написанный код 3. Самое главное : выбор между скорость/память
0
|
331 / 283 / 78
Регистрация: 02.08.2016
Сообщений: 1,008
|
|
20.01.2017, 15:04 | 5 |
Может тогда нужно писать mainList.Count()? Не помню, чтоб в C++ были свойства или что-то подобное.
0
|
20.01.2017, 15:24 | 6 | |||||
Имхо, в процессе цикла то вызов метода (или обращение к полю) какого-либо объекта может каждый раз давать разное значение, поэтому компилятор не возьмет на себя ответственность "класть х на регистр" (С) Тоже самое:
0
|
0 / 0 / 1
Регистрация: 23.07.2016
Сообщений: 34
|
|
20.01.2017, 15:38 [ТС] | 7 |
Я имею в виду методы, которые возвращают одно и тоже значение : (размер массива, пятое значение из xml-дерева и т.д.)
0
|
20.01.2017, 15:45 | 8 |
Имхо, тут главное не что вы имеете в виду, а что поимеет в виду компилятор Если он по какой-то причине сочтет, что значение переменной/результат метода не будут меняться, то он "положит х на регистр" (С). Но для такого решения ему нужно обоснование в виде non volatile переменной (что по-умолчанию) и pure функции (в D вроде есть, в С++ не знаю) - что не по умолчанию.
0
|
148 / 118 / 37
Регистрация: 27.10.2011
Сообщений: 690
|
|
20.01.2017, 20:16 | 9 |
_Ivana, я рассматривал вполне конкретный пример (о чем сразу и написал), где x не менялся. Оснований не класть х на регистр у компилятора нет
0
|
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
|
|
20.01.2017, 21:53 | 11 |
Очень не факт что поймет. Допустим, в теле цикла есть строчка mainList.Data[3]=0. Кто даст компилятору гарантию что mainList.Data не равно &mainList.Count-3, а mainList.Data[3] не синоним mainList.Count? Разумеется, делать так - форменное извращенство. Но откуда компилятору знать, может программист - изврещенец и есть?
С другой стороны, если разговор идет про локальную переменную, компилятор вполне может отследить что никто подозрительных указателей на эту переменную не создавал.
0
|
20.01.2017, 21:53 | |
20.01.2017, 21:53 | |
Помогаю со студенческими работами здесь
11
Обращение к методам в классе Обращение к методам в классе Обращение к методам класса Обращение к методам класса File Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |