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

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

Войти
Регистрация
Восстановить пароль
 
 
_Ivana
3149 / 1777 / 152
Регистрация: 01.03.2013
Сообщений: 4,981
Записей в блоге: 2
#1

Storage durations - C++

28.07.2016, 20:27. Просмотров 410. Ответов 32
Метки нет (Все метки)

Страшно обилие реализаций абстракции и правил их применения Лямбды, насколько я помню - это объекты (анонимные функтоуры?), создаются без нью, живут на стеке, делита не требуют... Или я все спутал с прямым углом?
 Комментарий модератора 
По мотивам этой темы Прибавить к результату работы функции единицу в куче создана новая, т.к. там обсуждение ушло за рамки вопроса ТС
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.07.2016, 20:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Storage durations (C++):

Дублируются файлы в папках и в /storage/emulated/0 и /storage/emulated/legacy — почему? - Программирование Android
Почему дублируются папки в Андроид и можно ли это как-то предотвратить? Андроид 5.1 И можно ли удалить из legacy - проблем точно не...

Local Storage - PHP БД
Пример: есть интернет-магазин, без регистрации. Добавляем товары в корзину. Смотрим в веб-консили - сессий нет, куи нет. Есть только Local...

Local storage - JavaScript
Доброго времени суток. Недавно появился реквест относительно меню моего сайта. Суть такова: имеется индекс страничка с 2-мя фреймами - меню...

Internal storage - Программирование Android
У меня есть 2 телефона: Samsung ace2 и HTC One V. На первом стоит андроид 2.3, на втором 4.0.3 Мне нужно писать данные в файл. Этот...

Не работает storage.sort() - Python
Не пойму в чем дело. Вроде меняет первоначальную структуру, но не до конца. class Stack: def __init__(self): self.storage...

VK API метод storage.get - ActionScript
Пытаюсь сделать приложение, в котором устанавливаю переменную методом storage.set, а потом получаю методом storage.get ее и вывожу в...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
DrOffset
7155 / 4296 / 972
Регистрация: 30.01.2014
Сообщений: 7,101
28.07.2016, 20:29 #2
Цитата Сообщение от _Ivana Посмотреть сообщение
Лямбды, насколько я помню - это объекты (анонимные функтоуры?), создаются без нью, живут на стеке, делита не требуют...
Да.
Но ведь это никакое не обилие, все работает в старых рамках: см. storage duration.
Почему лямбды рассматриваются тобой отдельно? Ведь ты любой объект можешь так создать.
1
_Ivana
3149 / 1777 / 152
Регистрация: 01.03.2013
Сообщений: 4,981
Записей в блоге: 2
28.07.2016, 20:33  [ТС] #3
Цитата Сообщение от DrOffset Посмотреть сообщение
Почему лямбды рассматриваются тобой отдельно?
Потому что я там сидел про них читал, смотрел примеры и использовал. А про
Цитата Сообщение от DrOffset Посмотреть сообщение
Ведь ты любой объект можешь так создать.
я не читал, не смотрел примеры и не использовал Везде пишут - экземпляр создается по конструктору нью, удаляется по делиту вызывая деструктор. А дальше второй страницы я не читал
0
DrOffset
7155 / 4296 / 972
Регистрация: 30.01.2014
Сообщений: 7,101
28.07.2016, 20:41 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от _Ivana Посмотреть сообщение
Везде пишут - экземпляр создается по конструктору нью, удаляется по делиту вызывая деструктор.
Эм. Честно говоря это очень странное "везде"...

Вот примеры:
C++
1
2
3
4
5
6
void foo()
{
    A * p = new A(10); // Объект типа A инициализированный числом 10 имеет dynamic storage duration: та самая куча. 
    // деструктор ~A() вызовется при выполнении delete
    // Указатель p на объект типа А имеет automatic storage duration: тот самый стек
}
C++
1
2
3
4
5
void foo()
{
    A a(10); // Объект типа A инициализированный числом 10 имеет automatic storage duration, 
    // деструктор вызовется в конце области видимости автоматически
}
C++
1
2
3
4
5
void foo()
{
    static A a(10); // Объект типа A инициализированный числом 10 имеет static storage duration, 
    // деструктор вызовется в конце выполнения программы
}
0
_Ivana
3149 / 1777 / 152
Регистрация: 01.03.2013
Сообщений: 4,981
Записей в блоге: 2
28.07.2016, 20:45  [ТС] #5
DrOffset, офигеть! Кстати, начинаю припоминать, что и подобное читал... Но из-за отсутствия практики применения эта информация быстро выветрилась из оперативной памяти - типа автоматической области видимости: с глаз долой - из сердца мозга вон
0
Kastaneda
Форумчанин
Эксперт С++
4653 / 2862 / 228
Регистрация: 12.12.2009
Сообщений: 7,271
Записей в блоге: 2
Завершенные тесты: 1
28.07.2016, 20:52 #6
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
В С++11 еще появился thread storage duration - объект создается на время жизни потока.
0
Stitch Igorek
45 / 45 / 18
Регистрация: 02.04.2016
Сообщений: 308
Завершенные тесты: 1
28.07.2016, 21:21 #7
Цитата Сообщение от Kastaneda Посмотреть сообщение
thread storage duration - объект создается на время жизни потока.
поподробнее можно про это? просто
Цитата Сообщение от DrOffset Посмотреть сообщение
void foo()
{
* * A a(10); // Объект типа A инициализированный числом 10 имеет automatic storage duration,
* * // деструктор вызовется в конце области видимости автоматически
}
если foo() будет работать в дополнительном потоке - все равно поток закроется позже чем деструктор в конце функции,
а
Цитата Сообщение от DrOffset Посмотреть сообщение
void foo()
{
* * static A a(10); // Объект типа A инициализированный числом 10 имеет static storage duration,
* * // деструктор вызовется в конце выполнения программы
}
будет (наверно) жить даже после закрытия потока с foo(). можно на примере кода это посмотреть =)
0
Kastaneda
Форумчанин
Эксперт С++
4653 / 2862 / 228
Регистрация: 12.12.2009
Сообщений: 7,271
Записей в блоге: 2
Завершенные тесты: 1
28.07.2016, 21:34 #8
Цитата Сообщение от Stitch Igorek Посмотреть сообщение
можно на примере кода это посмотреть =)
C++
1
2
3
4
5
6
7
thread_local A a {10}; // это пишем в global scope
 
void foo() // foo выполняется в потоке
{ 
   // 'a' создался
    a.bar();
} // 'a' уничтожился
объект 'a' будет создаваться/уничтожаться для каждого потока.
2
rikimaru2013
C++ Game Dev
2436 / 1130 / 240
Регистрация: 30.11.2013
Сообщений: 3,687
28.07.2016, 22:08 #9
Kastaneda, а вы использовали их? Есть какой-то супер профит или проблема которую можно решить только с ними.
0
hoggy
Нарушитель
6589 / 2770 / 476
Регистрация: 15.11.2014
Сообщений: 6,123
Завершенные тесты: 1
28.07.2016, 22:18 #10
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Есть какой-то супер профит или проблема которую можно решить только с ними.
например - логгер в многопоточной среде.
логгер сам по себе - сингелтон:

C++
1
2
3
4
5
void foo()
{
    log << "ololo"; //<--- треды за него не конкурируют
      //потому что он у каждого треда свой собственный
}
если бы не тред-локал,
тогда пришлось бы всякие мутексы использовать.
и это приводило бы к просадке производительности.

ну или пришлось бы отказаться от глобальной переменной.
1
Kastaneda
Форумчанин
Эксперт С++
4653 / 2862 / 228
Регистрация: 12.12.2009
Сообщений: 7,271
Записей в блоге: 2
Завершенные тесты: 1
28.07.2016, 22:25 #11
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Kastaneda, а вы использовали их?
На практике не приходилось, просто необходимости не было.
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Есть какой-то супер профит или проблема которую можно решить только с ними.
Думаю безусловно есть, сходу пример придумать не могу, мозги спят уже, пол третьего ночи)
0
rikimaru2013
C++ Game Dev
2436 / 1130 / 240
Регистрация: 30.11.2013
Сообщений: 3,687
28.07.2016, 22:37 #12
hoggy, разве объект log не пишет в файл и тем самым хоть объект защищён, но доступ к файлу врядли многопоточный.
0
Kastaneda
Форумчанин
Эксперт С++
4653 / 2862 / 228
Регистрация: 12.12.2009
Сообщений: 7,271
Записей в блоге: 2
Завершенные тесты: 1
28.07.2016, 22:42 #13
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
разве объект log не пишет в файл и тем самым хоть объект защищён, но доступ к файлу врядли многопоточный.
Вот так можно перемешать данные
C++
1
log << "one" << "two;
в момент каждого << управление может передаться другому потоку.
1
Stitch Igorek
45 / 45 / 18
Регистрация: 02.04.2016
Сообщений: 308
Завершенные тесты: 1
28.07.2016, 22:42 #14
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Есть какой-то супер профит или проблема которую можно решить только с ними.
Вот думаю при написании игр неплохо сэкономит ресурсы железа(гонять одни и те же данные по множеству функций даже по ссылкам или указателям, затрачивает память - эти указатели помещаются в стек. Использовать глобальные переменные, и работать с ними из функций - немного уменьшает затраты памяти, но усложняет написание многопоточного приложения(одни и те же глобальные переменные будут считаться в разных потоках и ничего хорошего из этого не выйдет), а тут "Эврика" - возможность создать свои "глобальные" переменные для каждого потока).
Может я конечно и не прав...
0
rikimaru2013
C++ Game Dev
2436 / 1130 / 240
Регистрация: 30.11.2013
Сообщений: 3,687
28.07.2016, 22:44 #15
Цитата Сообщение от Stitch Igorek Посмотреть сообщение
Использовать глобальные переменные
Цитата Сообщение от Stitch Igorek Посмотреть сообщение
Может я конечно и не прав...
Может? Как по мне очевидный пуш палки в колесо
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.07.2016, 22:44
Привет! Вот еще темы с ответами:

Intel Rapid Storage - Софт
Что это за прога ?

HTML5 Database storage - HTML, CSS
Если кто нибудь пользовался данной штукой, то собственно вопрос. Где находятся дынные физически? Т.Е. Я создаю базу данных, заполняю...

Intel Rapid Storage - Windows 7
Что это вообще за штука? Это софтина, драйвер, утилита, или драйвер с возможностью управления через GUI? Имеет ли смысл ставить на...

Storage Engine в MySQL - MySQL
Здраствуйте.Может кто нибуть подсказать что означает Storage Engine в MySQL? Заранее спасибо


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
28.07.2016, 22:44
Ответ Создать тему
Опции темы

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