Форум программистов, компьютерный форум, киберфорум
Священные войны
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
 Аватар для nullxdth
2305 / 1064 / 77
Регистрация: 12.03.2013
Сообщений: 4,987
11.01.2017, 17:43
Студворк — интернет-сервис помощи студентам
Да сколько уж можно-то переливать из пустого порожнее?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.01.2017, 17:43
Ответы с готовыми решениями:

Что даёт использование классов (и шире - ООП) в языке программирования С++?
Понял что такое классы. Но как я ими могу пользоваться ? Допустим. Я создал программу для ввода банковских реквизитов. Я могу в...

Концепция ООП и их использование в современных языках программирования
Дали курсовую на эту тему. Подскажите, какую литературу, которую можно бы было использовать пр написании. Спасибо. :з

Что дает использование сетки Бутстрапа
Ведь даже если элементам задать margin в процентах плюс ширину в процентах,то элементы перемещаются соотвественно с уменьшением экрана. ...

74
 Аватар для Voivoid
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
11.01.2017, 17:52
Цитата Сообщение от nullxdth Посмотреть сообщение
Да сколько уж можно-то переливать из пустого порожнее?
Дык, вбрось че-нить новое что-ли. А то ничего другого-то больше нет
0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
11.01.2017, 18:02
Цитата Сообщение от Voivoid Посмотреть сообщение
а если мы ее вызовем этот фанкшн? в любом случае два размена и сравнение. А расказывают сказку про гонку указателей с виртуальным вызовами. в STL все указатели так сидят. А weak это вообще нечто.
0
 Аватар для Voivoid
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
11.01.2017, 18:10
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
а если мы ее вызовем этот фанкшн?
Ну, вызови, мне не жалко

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
в любом случае два размена и сравнение
Ты где там сравнение нашел, болезный?

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
А расказывают сказку про гонку указателей с виртуальным вызовами. в STL все указатели так сидят. А weak это вообще нечто.
Ты внятно своим мысли можешь выражать?
0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
11.01.2017, 18:26
Цитата Сообщение от Voivoid Посмотреть сообщение
Ты внятно своим мысли можешь выражать?
По русски - нам тут уже второй десяток лет некоторые продвинутые пытаются рассказать что виртуальные вызова зло и вообще автономные объекты зло и они должны типа быть пассивными хранилищами данных и сидеть в контейнерах STL. а то промахи стека при доступе потому как два раза локап по указателю при вызове виртуального метода. И даже книги с диссертациями на эту тему пишут реально. А оказывается к шаредам и викам тоже доступ через двойной лукап. Так это указатели которые типа должны быть повсеместно а не виртуальные методы которых обычно не более 15%.
При этом концепция веака умиляет - лечим висячие ссылки утечкой в надежде что эта утечка будет временной.
0
 Аватар для Voivoid
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
11.01.2017, 18:37
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
некоторые продвинутые пытаются рассказать
Кто? Где? Больше похоже, что ты сам на пустом месте сделал выводы космических масштабов.

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
виртуальные вызова зло и вообще автономные объекты зло и они должны типа быть пассивными хранилищами данных и сидеть в контейнерах STL. а то промахи стека при доступе потому как два раза локап по указателю при вызове виртуального метода. И даже книги с диссертациями на эту тему пишут реально. А оказывается к шаредам и викам тоже доступ через двойной лукап. Так это указатели которые типа должны быть повсеместно а не виртуальные методы которых обычно не более 15%.
В огороде бузина, а в Киеве - дядька. Как у тебя shared pointer'ы связаны с виртуальными функциями-то, лол? Хотя подозреваю, что ты опять про свои, всем уже надоевшие, владеющие контейнеры

Добавлено через 58 секунд
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
При этом концепция шареда умиляет - лечим висячие ссылки утечкой в надежде что эта утечка будет временной.
Да ради бога, не нравится - не пользуйся
0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
11.01.2017, 18:39
Цитата Сообщение от Voivoid Посмотреть сообщение
Как у тебя shared pointer'ы связаны с виртуальными функциями-то, л
Фактически та же манипуляция с памятью что и у виртуального метода. двойной лукап.
0
11.01.2017, 23:08

Не по теме:

"Господа! Если Вы такие умные, то почему строем не ходите?":wall:

0
Заблокирован
12.01.2017, 01:40
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
а если мы ее вызовем этот фанкшн? в любом случае два размена и сравнение.
Пропустил ответ на
Цитата Сообщение от Voivoid Посмотреть сообщение
Ты где там сравнение нашел, болезный?
А мне тоже интересно. И про 2 размена не понятно.
0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
12.01.2017, 09:04
Цитата Сообщение от nimazzzy Посмотреть сообщение
А мне тоже интересно. И про 2 размена не понятно.
Ну что не понятного? шаред хранит указатель не на сам объект а на дескриптор в котром записан рефкаунт и указатель на объект. соответственно при доступе сначала разыменовывается указатель на дескриптор потом разыменовывается указатель на объект.
Кстати способы избежать этого существуют. т.е. объект заранее создается с интегрированным в него а не навешенным сверху рефкаунтингом. Для этого он должен так в исходе конструироваться а не рефккаунтинг извне навешиваться. при этом еще один заяц убивается - невозможность существования двух дескрипторов рефкаунтинга для одного объекта (ушатать рефкаунтинг поимением двух шаед дескрипторов на один и тот же объект средствами stl вообще не проблема). Минус только один - на такие объекты сырыми указаателями нельзя ссылаться. Но такие смартпоинтеры для реализации должны быть нативными в языке а не библиотечными средствами делаться. Пример таких расширений - оператор gcnew и указатели ^ в MSVC++.Net и анонсированный эмбаркодеро автоматический рефкаунтинг вообще всего что возвращает new.

Добавлено через 23 минуты
Цитата Сообщение от nimazzzy Посмотреть сообщение
А мне тоже интересно.
по поводу сравнения. Шаред может быть и пустым. т.е. указатель на дескриптор = nullptr. Соответсвенно это тоже нужно проверить перед тем как читать дескриптор.
0
Заблокирован
12.01.2017, 09:06
Я все еще не вижу ни 2 размена, ни сравнения. Код приведенный идентичен сырому указателю. Ты можешь не пускаться в словоблудие, а прям построчно указать, в какой строке в этих двух строках 2 размена и в какой сравнение? Спасибо.
0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
12.01.2017, 09:14
Цитата Сообщение от nimazzzy Посмотреть сообщение
Код приведенный идентичен сырому указателю.
Где он идентичный? два чтения QWORD [reg] у сырого одно. При этом при каждом чтении имеешь шанс отдохнуть 500 и более тактов.
0
Заблокирован
12.01.2017, 09:24
Fulcrum_013, те же 2. Значение указателя сначала так же надо положить в регистр, потом так же обратиться по адресу из регистра. Разница лишь в том будет, что при передаче указателя в функцию, первая операция будет до вызова.
Так что, будет 2 размена и сравнение?
0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
12.01.2017, 09:54
Цитата Сообщение от nimazzzy Посмотреть сообщение
Значение указателя сначала так же надо положить в регистр, потом так же обратиться по адресу из регистра. Разница лишь в том будет, что при передаче указателя в функцию, первая операция будет до вызова.
Так что, будет 2 размена и сравнение?
При чтении из шареда нужно положить значение указателя в регистр. потом прочитать значение по этому указателю и положить его в регистр. И только мотом прочитать данные.
т.е (*a)++
для сырого указателя:
Assembler
1
2
mov reg,a
inc [reg]
для шареда:
Assembler
1
2
3
mov reg,a
mov reg,[reg]
inc [reg]
Добавлено через 21 минуту
другими словами аналог *raw для шареда получается *(Descriptor->Object) т.е. 2 размена
0
Заблокирован
12.01.2017, 10:29
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Для шареда:
mov reg,a
mov reg,[reg]
inc [reg]
Неа, чувак:
Assembler
1
2
mov         eax,dword ptr [ebp-18h]
inc         dword ptr [eax]
Где ebp-18h - это есть указатель внутри shared_ptr. Который и есть сырой указатель, то есть адрес данных.
И довольно уже уходить от темы. Построчно, плиз. Где там сравнение потерял?
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
12.01.2017, 10:39
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
шаред хранит указатель не на сам объект а на дескриптор в котром записан рефкаунт и указатель на объект.
gcc 4.8.4
shared_ptr_base.h:
C++
1
2
3
4
5
6
7
8
template<typename _Tp, _Lock_policy _Lp>
class __shared_ptr
{
  // ...
private:
  _Tp*  _M_ptr;                      // Contained pointer.
  __shared_count<_Lp>  _M_refcount;  // Reference counter.
};
shared_ptr.h:
C++
1
2
3
4
template<typename _Tp>
class shared_ptr : public __shared_ptr<_Tp>
{
  // ...
0
 Аватар для Voivoid
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
12.01.2017, 10:50
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
шаред хранит указатель не на сам объект а на дескриптор в котром записан рефкаунт и указатель на объект
Нет. shared_ptr ( в не зависимости как созданный, хоть через make_shared, хоть руками ) хранит в себе, а не в дескрипторе, указатель на объект. Соответственно ассемблреный код будет аналогичен коду с сырым указателем.

Сколько уж можно разговаривать о том, о чем ничего не знаешь? Сложно что-ли взять и проверить?
0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
12.01.2017, 11:00
Цитата Сообщение от 0x10 Посмотреть сообщение
gcc 4.8.4
shared_ptr_base.h:
Гораздо более печальный способ который тоже никоим образом не ликвидирует возможность наличия двух дескрипторов для одного объекта. Такой способ кстати не гарантирует и отсутствие двух объектов для одного дескриптора. При этом передается куда то в функцию такая штука все равно по ссылке а не напрямую. соответственно двойного размена все равно не избежать.
А избеэать его можно только если __shared_count<_Lp> _M_refcount; // Reference counter. интегрировать в сам объект при его создании по отрицательному смещению. Но этим заниматься должен компилятор а не библиотека.
0
Заблокирован
12.01.2017, 11:44

Не по теме:

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
шаред хранит указатель не на сам объект а на дескриптор в котром записан рефкаунт и указатель на объект. соответственно при доступе сначала разыменовывается указатель на дескриптор потом разыменовывается указатель на объект.
Кстати способы избежать этого существуют. т.е. объект заранее создается с интегрированным в него а не навешенным сверху рефкаунтингом. Для этого он должен так в исходе конструироваться а не рефккаунтинг извне навешиваться. при этом еще один заяц убивается - невозможность существования двух дескрипторов рефкаунтинга для одного объекта (ушатать рефкаунтинг поимением двух шаед дескрипторов на один и тот же объект средствами stl вообще не проблема). Минус только один - на такие объекты сырыми указаателями нельзя ссылаться. Но такие смартпоинтеры для реализации должны быть нативными в языке а не библиотечными средствами делаться. Пример таких расширений - оператор gcnew и указатели ^ в MSVC++.Net и анонсированный эмбаркодеро автоматический рефкаунтинг вообще всего что возвращает new.
Ты реально доставляешь. Так круто пишешь, что если бы я не знал асм, то слушал бы тебя с открытым ртом, и в жизни бы не понял, что ты живешь в фентезийном мире, где сам выдумываешь проблемы, сам их героически решаешь. Это не в обиду. Я реально впечатлен. Очень знающим человеком выглядишь. Мне не хватает в жизни умения так же лечить в годовых отчетах.


Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
не ликвидирует возможность наличия двух дескрипторов для одного объекта
омг, опять дескрипторы...
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
При этом передается куда то в функцию такая штука все равно по ссылке а не напрямую. соответственно двойного размена все равно не избежать.
Без разницы. C сырым указателем будет то же самое. Чтобы передать указатель в функцию - это копия адреса. Чтобы сделать копию адреса для передачи в функцию, его надо взять и положить в стек (ia32), либо в регистр (intel64). Потом внутри функции так же обращаться по переданному адресу. И, как писал уже выше, разница будет лишь в том, что первое обращение будет до вызова функции. Пример дизасма с шаред_птр был выше.
Вот пример с сырым указателем:
C++
1
2
3
4
int func(int* ptr)
{
    return *ptr;
}
Вызов:
Assembler
1
2
mov         rcx,qword ptr [rsp+0D8h]  ; первое обращение
 call        func (07FF7495D106Eh)
Внутри функции:
Assembler
1
 mov         eax,dword ptr [rcx] ; второе
Все то же самое, что и для shared_ptr.

Добавлено через 7 минут
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
двойного размена
И вообще, размен чего? Ты как будто про деньги говоришь. Что за размен? Откуда ты такие слова берешь? И почему я до сих пор, все еще, еще пока, не увидел строчку ассемблера со сравнением?
0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
12.01.2017, 12:03
Цитата Сообщение от nimazzzy Посмотреть сообщение
Потом внутри функции так же обращаться по переданному адресу. И, как писал уже выше, разница будет лишь в том, что первое обращение будет до вызова функции. Пример дизасма с шаред_птр был выше.
Вот пример с сырым указателем:
C++
Вот вот. Нужно положиь в регистр. Сырой указатель при этом в регистр лезет. А вот пара указателей шареда ну никак в регистр не помещается. Поэтому либо через стек с приращением коунтера что при передаче в функцию не нужно либо через ссылку на структуру. В результате при обращении к агрументу-шареду будет все равно двойное разименовывание.
Цитата Сообщение от nimazzzy Посмотреть сообщение
И вообще, размен чего?
В этой же теме таким термином разыменовывание назвали
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.01.2017, 12:03
Помогаю со студенческими работами здесь

Посоветуйте книгу по C# в которой как можно шире раскрыты прелести ООП
посоветуйте, пожалуйста, книгу по C#, в которой как можно шире раскрыты прелести объектно-ориентированного программирования (области...

Что значат эти скобки >>> в языке программирования
зарание извиняюсь если вопросы глупые , я начал только сегодня изучать программирование на языке питон , сразу хочу сказать что мой уровень...

Использование функции DCount в элементе управления отчета Access2003 не дает желаемого результата. Что делать?
Здравствуйте. Имеем отчет Access2003, основанный на запросе &quot;запСота&quot;. В отчете в разделе Заголовок имеем вычисляемое поле со следующей...

На русском языке или языке программирования
Опишите на русском языке или на одном из языков программирования алгоритм получения из целочисленного массива А состоящего из 30 элементов...

Множественное наследование, Перегрузка функций, Перегрузка операторов, Использование дружественных функций и классов, Использование шаблонов классов
Здравствуйте!!! Я бы хотел попросить помоч решить...ну или скинуть примеры таких задач, если вдруг у вас они завалялись на компе или...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
Модель здравосохранения 17. Планы на выгорание
anaschu 23.05.2026
Вот конкретная схема реализации: В классе Работник добавить: накопленнаяУсталость — растёт каждый час работы, снижается в перерывы и болезни коэффициентПрезентеизма — снижает продуктивность. . .
Изменение цветов в палитре gif файла aka фавикона
russiannick 23.05.2026
Изменение цветов в палитре gif файла, юзаемого как фавиконка в составе html-файла, помещенная в base64, средствами нативного Java Script, навеянное сном в майский день. Для работы необходим браузер,. . .
Модель здравосохранения 16. Слишком хорошие и здоровые сотрудники уходят, недовольные зарплатой
anaschu 23.05.2026
Отладка увольнений и настройка производительности Сегодня во второй половине дня разобрались с механикой увольнений и настроили коэффициент сложности заданий. Вот что было сделано. . . .
Как я стал коммунистом))) Модель сохранения здоровья сотрудников, запись блога номер 15
anaschu 23.05.2026
Внезапно хорошее здоровье сотрудников не нужно капиталистам?))
Модель здравоСохранения 15. Как мы чинили AnyLogic модель рабочего коллектива: сочленение диаграммы состояний болезней и поломок в ресурспул
anaschu 23.05.2026
Как мы чинили AnyLogic модель рабочего коллектива Сегодня разобрались с пятью багами, из-за которых модель либо падала с ошибкой, либо давала совершенно бессмысленные результаты. Каждый баг был. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru