@ProCxx

Страница 1685 из 2477
Berkus
23.01.2018
16:31:50
так и shared_ptr быстрая
при multicore contention - ОЧЕНЬ медленная

Stanislav
23.01.2018
16:33:53
ты же в курсе что delete nullptr это вполне ок и описано в стандарте? проверка не нужна

Vsevolod
23.01.2018
16:35:02
это надо взять какой-нибудь оптерон многоголовый, чтобы она была очень медленная

Google
Alexander
23.01.2018
16:35:49
и так лучше не делать никогда

Stanislav
23.01.2018
16:36:04
зато delete this опасен всегда
не надо так делать

Alexander
23.01.2018
16:36:14
не надо так делать
вот-вот, согласен. не надо так делать

Berkus
23.01.2018
16:38:00
ты же в курсе что delete nullptr это вполне ок и описано в стандарте? проверка не нужна
да, но проверки при вызовах методов на этом ptr, потому что nullptr->method() почему-то не работает

Berkus
23.01.2018
16:38:48
а на delete this надо проверку делать?
да, if (delete this) { убиться_апстену(); }

вот это
там тоже проверка на нулл не себя, т.к. по стандарту this не может быть null

это только в уебанском msvc бывает что this == nullptr

Stanislav
23.01.2018
16:39:40
да я ваще не this, я походу пропустил всю дискуссию

Google
Berkus
23.01.2018
16:40:07
в MFC (лол)

Berkus
23.01.2018
16:40:21
if (this != nullptr) { ... бла бла

Pavel
23.01.2018
16:40:22
не только кстати в MFC

Alexander
23.01.2018
16:40:27
в MFC (лол)
так-так-так, MFC это библиотека промышленного уровня, попрошу

Berkus
23.01.2018
16:40:45
так-так-так, MFC это библиотека промышленного уровня, попрошу
ну там довольно промышленные индусы наворотили промышленной хуйни

или промышенные...

Alex Фэils?︙
23.01.2018
16:45:40
В Питере
надо б заметку в @procxxnews зафигарить

по сути это call_back функция, вызываемая потрохами windows
можно в User Data хранить данные полезные, тот же shared_ptr ,ну или что там надо

SetWindowLongPtr

Anatoly
23.01.2018
16:48:21
SetWindowLongPtr
так и хранится, я не хотел деталей, а хотел описать, что не объект С++ управляет временем жизни ресурса, а ресурс (окно) управляет временем жизни объекта С++. и что в этом случае, чтобы осуществить удаление объекта С++ и используется delete this при получении оповещения от Windows Manager-a об уничтожении окна

Berkus
23.01.2018
16:54:53
где тема заз

мне нужен стикер с ассенизаторской машиной и надписью delete this; на ней

Anatoly
23.01.2018
16:55:55
обычно в win api-приложухах идет так: 1. регистрация класса окна; 2. создание окна; 3. цикл сообщений; 4. чистка дерьма.
мы чуть выше поднялись, на уровень MFC, где это все скрыто и до нас доходят только обработчики в контексте объекта С++

Alex Фэils?︙
23.01.2018
16:56:28
а, если mfc, то там тяжко, да. Кстати. Тут WTL 10 зарелизился недавно!

Anatoly
23.01.2018
16:57:34
а, если mfc, то там тяжко, да. Кстати. Тут WTL 10 зарелизился недавно!
я не знаю куда это засунуть при наличии того же Qt. разве что у кого-то написано что-то на нем.

Alex Фэils?︙
23.01.2018
16:58:08
где тема заз
он тут есть!

Google
Alex Фэils?︙
23.01.2018
17:05:48
Constantine
23.01.2018
17:49:06
а это зачем?
потому что взаимные оповещения о смерти

if (this != nullptr) { ... бла бла
там эта проверка в одном случае, кстати

и без нее реально заебешься кодить

Alex Фэils?︙
23.01.2018
17:50:33
if (this != nullptr) { ... бла бла
гцц вроде может отломить код из-за оптимизации

Constantine
23.01.2018
17:51:48
гцц вроде может отломить код из-за оптимизации
Они так и делают. А вижаку норм, ибо ответ "почему так не надо" не самый интересный

Berkus
23.01.2018
17:51:52
гцц вроде может отломить код из-за оптимизации
не, это всегда true поэтому вся ветка выполняется без ифов

вот и всё

Constantine
23.01.2018
17:52:48
вижак просто non-conformant стандарта
ну да, вижак не по стандарту, зато нет копипасты 1000 раз одного и того же

потому что этот внутренний this == nullptr выносить наверх с расстрелами ноги

в conformant

Constantine
23.01.2018
17:54:00
он там используется для запроса wrapped handle из wrapper-а

Constantine
23.01.2018
17:55:36
мне на самом деле интересно, в 2к4 как там были дела с не-MFC объектными обертками над виндой

Alex Фэils?︙
23.01.2018
17:55:58
ATL вроде более-менее

Constantine
23.01.2018
17:56:07
там полный ужас

я бы за паттерн class some : template<some> вообще убивал бы

Berkus
23.01.2018
17:56:50
Alex Фэils?︙
23.01.2018
17:57:08
Google
Constantine
23.01.2018
17:57:09
это нормальный CRTP
и как там дела с наследованием таких классов

Berkus
23.01.2018
17:57:31
и как там дела с наследованием таких классов
так же как и с другим наследованием - наследуешь, прекрасно себя чувствуешь

ты знаешь что делает template<some>?

Constantine
23.01.2018
17:57:55
Berkus
23.01.2018
17:58:20
ну давай, унаследуй T: enable_shared_from_this<T> нормально
зачем, я предпочитаю плоские иерархии

Constantine
23.01.2018
17:58:56
зачем, я предпочитаю плоские иерархии
ну то есть предпочитаешь отсутствие иерархии, динамического полиморфизма и компиляцию вечность

Admin
ERROR: S client not available

Berkus
23.01.2018
17:59:32
ну то есть предпочитаешь отсутствие иерархии, динамического полиморфизма и компиляцию вечность
предпочитаю дружить с логикой и не делать идиотские выводы как ты сейчас только что

Constantine
23.01.2018
18:00:01
окай, скажи мне, как мне объявить абстрактное дерево с узлами под shared_ptr

/dev
23.01.2018
18:03:19
гцц вроде может отломить код из-за оптимизации
и может, и ломает, со свистом, пританцовывая

Constantine
23.01.2018
18:07:18
не скажу
ну вот тебе и ответ про логику

как только возникает малейшая естественная иерархия, enable_shared_from_this летит на помойку

и да, нельзя определять внешний tree_node с потомками, пушо в этом случае узел дерева не видит своих потомков

Ioann V
23.01.2018
18:18:02
Ребят, у меня к вам вопрос

Как такое возможно, что я запускаю тест - он рабоает одно время, запускаю его снова - другое, большее ?

и так, постоянно время скачет ...

Constantine
23.01.2018
18:19:06
у системы буфер записи кончился, а ты пишешь на HDD 1ГБ инфы

fox.cpp
23.01.2018
18:19:06
А что тест делает?

Ioann V
23.01.2018
18:19:30
Тест, вычисления делает

Google
Ioann V
23.01.2018
18:19:50
В моем случае, примитивном - банальное умножение матриц

Anatoly
23.01.2018
18:20:32
В моем случае, примитивном - банальное умножение матриц
а профилировщик какое самое горячее место показывает?

Ioann V
23.01.2018
18:20:51
И я никак не могу, замерить что и сколько у меня работает. Совершенно не могу. Так как работает оно по разному.

Berkus
23.01.2018
18:21:58
Как такое возможно, что я запускаю тест - он рабоает одно время, запускаю его снова - другое, большее ?
у меня тоже вопрос - на каком языке тест, какие фичи использует, чем компилириуется

Ioann V
23.01.2018
18:22:09
а профилировщик какое самое горячее место показывает?
Да там просто три цикла бахнуто, вот они скорее всего и будут узким местом. Вопрос то не в узкости и горлышке бутылки. А в том, почему разные запуски теста, дают разный ответ.

Berkus
23.01.2018
18:22:34
если просто три цикла то cache скорее всего, prefetch используешь?

в single-user mode тестируешь?

Аттрибутивно-ассоциативный ряд
23.01.2018
18:23:10
вопрос по cmake. перед проектом задаю set(CMAKE_CXX_STANDARD 17) и set(CMAKE_CXX_STANDARD_REQUIRED ON). Если собирать с компилятором по умолчанию (xcode toolchain on macos) то все хорошо и компилятору передается флаг -std=gnu++1z. но если указать другой компилятор через опции cmake -DCMAKE_C_COMPILER и -DCMAKE_CXX_COMPILER то флаг не передается и ничего не комплируется. Как указать cmake чтобы он вызывал мой компилятор с нужным флагом?

Ioann V
23.01.2018
18:23:23
если просто три цикла то cache скорее всего, prefetch используешь?
for (int i_3 = 0; i_3 < nColumnA; i_3 += BLOCK_STRIDE_ROW) { for (int i_1 = 0; i_1 < nRowA; i_1 += BLOCK_STRIDE_COL) { for (int i_2 = 0; i_2 < nColumnB; ++i_2) { C(i_1, i_3) += A(i_2, i_3) * B(i_1, i_2); C(i_1 + 1, i_3) += A(i_2, i_3) * B(i_1 + 1, i_2); C(i_1 + 2, i_3) += A(i_2, i_3) * B(i_1 + 2, i_2); C(i_1 + 3, i_3) += A(i_2, i_3) * B(i_1 + 3, i_2); } } }

Ioann V
23.01.2018
18:23:52
То есть, код такой - самый что ни на есть примитивный. Размеры матриц - степени двойки, т.е выходы за границы нету

fox.cpp
23.01.2018
18:24:19
А какой ты компилятор задаешь?
Он должен адекватно детектить и добавлять флаг для GCC/Clang.

Аттрибутивно-ассоциативный ряд
23.01.2018
18:24:24
Ioann V
23.01.2018
18:24:37
Видимо, скорее всего да, кеш. И префетч, видимо надо делать руками. Просто проблема в том, что там где он делается, а это уже asm код, тоже самое по прыгучести.

Berkus
23.01.2018
18:24:43
clang из brew
а где ты эти переменные ставишь, до project() или после?

Аттрибутивно-ассоциативный ряд
23.01.2018
18:24:49
до

а компилятор через командную строку

Страница 1685 из 2477