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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
Svinina
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
#1

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

16.11.2011, 23:54. Просмотров 1470. Ответов 21
Метки нет (Все метки)

Товарищи, есть ли разница между локальными и глобальными переменными в длительности чтения/записи в них?

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

Как замерить длительность выполнения кода? - C++
Нужно замерить длительность выполнения кода. Как?

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

Как сделать длительность цикла по количеству названий записанных в файл? - C++
Как сделать длительность цикла по количеству названий записанных в файл?

Посчитать длительность в секундах после того как График начинает убывать - C++
Ну вот собственно в чем проблема: По идее программа должна посчитать длительность в секундах после того как График начинает убывать...

обращения к указателям - C++
Написать обращения к указателям в глобальной,локальной и охватывающей сетях.

Уровни косвенного обращения - C++
День добрый, что такое уровни косвенного обращения, как и для чего они используются? Заранее благодарю с:

21
alex_x_x
бжни
2449 / 1654 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
17.11.2011, 00:01 #2
Цитата Сообщение от Svinina Посмотреть сообщение
Товарищи, есть ли разница между локальными и глобальными переменными в длительности чтения/записи в них?
локальные могут быть быстрее за счет того, что компилятор их расположит в регистрах процессора
глобальные же могут находиться только непосредственно в памяти
однако момент сей слишком тонкий и незначительный


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

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

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

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

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

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

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

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

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

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

Добавлено через 1 минуту
Цитата Сообщение от PraZuBeR Посмотреть сообщение
Если есть 100% гарантия что в эту переменную никто в это время не пишет.
Реализуемая механизмами синхронизации.
0
17.11.2011, 11:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.11.2011, 11:28
Привет! Вот еще темы с ответами:

формы и обращения к ним - C++
люди как создать 2-ю форму ну хочу чтоб у мя в проге было больше 1-го окна и как к ней над будь обращаться ведь к главной я обращаюсь так...

Отлов обращения по nullptr - C++
Добрый вечер, можно ли в крупной программе организовать систему отлова обращения по указателю nullptr ? Очень интересует вариант...

Ошибка обращения к элементу массива - C++
void sort(int *mas, int len) { int max = mas; int min = mas; for (int i = 1; i<len; ++i) { if (max < mas) max = mas;...

Ошибка обращения к нулевому адресу - C++
int main(int argc, char* argv) { ifstream f ("alphacntr",ios::in|ios::binary); if (!f) { cout<<"File opening...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru