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

Длительность обращения к переменным - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
Svinina
 Аватар для Svinina
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
16.11.2011, 23:54     Длительность обращения к переменным #1
Товарищи, есть ли разница между локальными и глобальными переменными в длительности чтения/записи в них?

И еще такой вопрос: у меня несколько потоков работают с одной переменной. Имеет ли смысл для каждого из них создать свою копию этой переменной, чтобы они не обращались к одной и той же области памяти? Будет ли выигрыш в быстродействии?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.11.2011, 23:54     Длительность обращения к переменным
Посмотрите здесь:

C++ Ошибка обращения к нулевому адресу
C++ формы и обращения к ним
Как замерить длительность выполнения кода? C++
C++ обращения к указателям
Уровни косвенного обращения C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
17.11.2011, 00:01     Длительность обращения к переменным #2
Цитата Сообщение от Svinina Посмотреть сообщение
Товарищи, есть ли разница между локальными и глобальными переменными в длительности чтения/записи в них?
локальные могут быть быстрее за счет того, что компилятор их расположит в регистрах процессора
глобальные же могут находиться только непосредственно в памяти
однако момент сей слишком тонкий и незначительный


Цитата Сообщение от Svinina Посмотреть сообщение
И еще такой вопрос: у меня несколько потоков работают с одной переменной. Имеет ли смысл для каждого из них создать свою копию этой переменной, чтобы они не обращались к одной и той же области памяти? Будет ли выигрыш в быстродействии?
так логика работы же поменяется

вообщем это не то место, где нужно искать ускорение
Svinina
 Аватар для Svinina
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
17.11.2011, 00:09  [ТС]     Длительность обращения к переменным #3
так логика работы же поменяется
Что ты имеешь ввиду под этим?

Я юзаю POSIX. Допустим у меня два потока выполняют некоторые вычисления, причем в этих вычислениях постоянно участвует некоторый коэффициент k. Я могу его объявить глобально, присвоить ему значение, а дальше запустить свои два потока и в них его использовать, либо же я могу объявить его глобально, присвоить значение, запустить потоки, далее в самом начале потока объявить свою переменную, присвоить ей значение k и дальше все вычисления производить с ней. Разница только в том, что в первом случае оба потока постоянно будут лезть по одному адресу, а во втором каждый из них будет лезть по своему.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
17.11.2011, 00:14     Длительность обращения к переменным #4
у каждого потока есть свой стек, то есть переменная будет в стеке
доступ к ней по скорости будет такой же как к глобальной

все же я не представляю, чтобы можно было заметить разницу по времени обращения
Svinina
 Аватар для Svinina
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
17.11.2011, 00:21  [ТС]     Длительность обращения к переменным #5
Цитата Сообщение от alex_x_x Посмотреть сообщение
у каждого потока есть свой стек, то есть переменная будет в стеке
доступ к ней по скорости будет такой же как к глобальной

все же я не представляю, чтобы можно было заметить разницу по времени обращения
Вопрос то мой в чем заключается: будут ли они конкурировать за глобальную переменную? В очередь становиться, если одновременно к ней обращаются? Или они будут ее параллельно считывать?
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
17.11.2011, 00:26     Длительность обращения к переменным #6
смотреть синхронизацию потоков
к переменной они могут обращаться как захотят
Svinina
 Аватар для Svinina
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
17.11.2011, 00:33  [ТС]     Длительность обращения к переменным #7
Так как они захотят к ней обращаться?) Для меня сейчас ключевой вопрос именно это.
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
17.11.2011, 01:21     Длительность обращения к переменным #8
Svinina, асинхронно они с ней будут обращаться, когда процессу она понадобится - тогда и обратятся
Paporotnik
383 / 227 / 7
Регистрация: 06.07.2011
Сообщений: 512
17.11.2011, 01:35     Длительность обращения к переменным #9
что значит "конкурировать"? какой процесс первый подаст команду на чтение переменной, тот и прочтет. и не о чем им конкурировать.
а вот запись-чтение переменной - совсем другое дело.
Svinina
 Аватар для Svinina
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
17.11.2011, 01:38  [ТС]     Длительность обращения к переменным #10
Gepar, а что произойдет, если два потока одновременно обратятся к одной и той же памяти? Одновременно они считают данные, или один поток подождет другого?

Добавлено через 2 минуты
Цитата Сообщение от Paporotnik Посмотреть сообщение
что значит "конкурировать"? какой процесс первый подаст команду на чтение переменной, тот и прочтет. и не о чем им конкурировать.
а вот запись-чтение переменной - совсем другое дело.
Ну под "конкуренцией" я понимаю соревнование за обладание неким ресурсом, одновременное обладание которым невозможно.

Вообще, наверное, мой вопрос слишком низкоуровневый...
prazuber
108 / 108 / 3
Регистрация: 29.04.2010
Сообщений: 240
17.11.2011, 02:02     Длительность обращения к переменным #11
Не будет просто так один поток другого ждать. Может такое случится, что один поток запишет половину данных, второй поток - вторую половину. В итоге полный бред в памяти и краш программы.

Гуглите синхронизацию потоков. Локи, мютексы и т.д. Тут все писать слишком уж долго.
Svinina
 Аватар для Svinina
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
17.11.2011, 02:07  [ТС]     Длительность обращения к переменным #12
Цитата Сообщение от PraZuBeR Посмотреть сообщение
Не будет просто так один поток другого ждать. Может такое случится, что один поток запишет половину данных, второй поток - вторую половину. В итоге полный бред в памяти и краш программы.

Гуглите синхронизацию потоков. Локи, мютексы и т.д. Тут все писать слишком уж долго.
Я сейчас не про запись, а про чтение.
При записи понятно, что без мьютексов не обойтись.
prazuber
108 / 108 / 3
Регистрация: 29.04.2010
Сообщений: 240
17.11.2011, 02:11     Длительность обращения к переменным #13
С одновременным чтением проблем быть не должно. Если есть 100% гарантия что в эту переменную никто в это время не пишет.
Svinina
 Аватар для Svinina
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
17.11.2011, 02:15  [ТС]     Длительность обращения к переменным #14

По ходу ответ я так и не получу...
Ладно, в любом случае спасибо всем, кто поучаствовал в обсуждении.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
17.11.2011, 11:28     Длительность обращения к переменным #15
Цитата Сообщение от Svinina Посмотреть сообщение
И еще такой вопрос: у меня несколько потоков работают с одной переменной. Имеет ли смысл для каждого из них создать свою копию этой переменной, чтобы они не обращались к одной и той же области памяти? Будет ли выигрыш в быстродействии?
Не быстродействием занимайся, а назначением. Почему переменная одна? Если это способ обмена инфой между потоками, то после записи одним потоком, остальные должны получить результат, разделив переменную на копии ты будешь вынужден добавить ещё копирующий поток, который однозначно посадит на себя часть процессорного времени, которое можно было бы полезно использовать, прога тормознётся, если же переменная должна использоваться не для связи, а просто ты захотел использовать совпадающее имя, то разорвать связь, этой переменной создаваемую, можно только разделив переменную на копии.

Добавлено через 1 минуту
Цитата Сообщение от PraZuBeR Посмотреть сообщение
Если есть 100% гарантия что в эту переменную никто в это время не пишет.
Реализуемая механизмами синхронизации.
Svinina
 Аватар для Svinina
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
17.11.2011, 20:02  [ТС]     Длительность обращения к переменным #16
Не быстродействием занимайся, а назначением. Почему переменная одна? Если это способ обмена инфой между потоками, то после записи одним потоком, остальные должны получить результат, разделив переменную на копии ты будешь вынужден добавить ещё копирующий поток, который однозначно посадит на себя часть процессорного времени, которое можно было бы полезно использовать, прога тормознётся, если же переменная должна использоваться не для связи, а просто ты захотел использовать совпадающее имя, то разорвать связь, этой переменной создаваемую, можно только разделив переменную на копии.
Если цель - быстродействие, заниматься надо им, нет?))
Переменная это коэффициент, используемый в вычислениях. Задается он один раз, при запуске программы, потоки ее только читают.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
17.11.2011, 20:23     Длительность обращения к переменным #17
Цитата Сообщение от Svinina Посмотреть сообщение
Если цель - быстродействие, заниматься надо им, нет?))
Быстрее, но совсем не то = хуже. Сначала надо сделать, что надо, а не что не надо, а потом быстрее/медленнее. Так вот, если тебе нужна одна переменная, то копии будут или тормознее, или не то. А если копии и нужны, то одна будет и не то и не быстрее.
Svinina
 Аватар для Svinina
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
17.11.2011, 20:30  [ТС]     Длительность обращения к переменным #18
taras atavin, я не понял, что ты написал.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
17.11.2011, 20:40     Длительность обращения к переменным #19
Ну вот представь себе: ты хочешь съесть мороженное, а тебе предлагают пруд, поближе к дому, чем озеро. Барахтаясь в воде ты мороженное если и съешь, то времени уйдет больше. А если хочешь искупаться, то нафига сначала готовить мороженное?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.11.2011, 21:02     Длительность обращения к переменным
Еще ссылки по теме:

C++ Ошибка в уровнях косвенного обращения
C++ Способы обращения к элементам массива
Структуры: информация о CD-дисках (исполнитель, название, длительность звучания, стоимость) C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Svinina
 Аватар для Svinina
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
17.11.2011, 21:02  [ТС]     Длительность обращения к переменным #20


taras atavin, ладно, еще раз объясню в чем состоял вопрос.
Есть ячейка в памяти. В этой ячейке лежат данные. И есть два параллельных процесса, которые одновременно из этой ячейки пытаются считать данные.
ВНИМАНИЕ, ВОПРОС: как данные из ячейки будут считаны процессами? Параллельно, или последовательно?
Все, больше меня ничего не интересует, ни алгоритм, ни альтернативные способы организации параллельности, ни синхронизация, забудь про все это.
Yandex
Объявления
17.11.2011, 21:02     Длительность обращения к переменным
Ответ Создать тему
Опции темы

Текущее время: 12:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru