Как стать автором
Обновить
3
0

Пользователь

Отправить сообщение

по поводу uniqur_ptr есть лайфхак, который я использую для заворачивания openssl объектов.
Тип деструктора должен быть compile time и размером 0, тогда uniqur_ptr будет 8 байт и без анонимных вызовов.
Достигается это:

using MyPtr = std::unique_ptr<Type, decltype([](Type *t) {Type_free(t);}) >

// либо через структуру если decltype не работает (вроде на gcc8 и ниже) 
trmplate<auto Func>
struct MyFree
{
 void operator () (Type *t) {(*Func)(t) ;} 
} 
using MyPtr2 = std::unique_ptr<Type, MyFree<Type_free>>

В вашем же случае uniqur_ptr будет 16байт и при удалении делать анонимный вызов

Ну да, я утрировал пример, чтобы продемонстрировать) Но вообще это один из аспектов - выбор алгоритма под входные данные, и то что кмп показывает в среднем такие же, а в предельных случаях - лучшие результаты и делает его уникальным.

П.С. Вы не подумайте, статья хорошая, + поставил

Ваш не очень наивный алгоритм на самом деле наивный, и имеет сложность O(m*n) с оговоркой, что оно стремится к m(длина текста) если в тексте мало префиксов паттерны. У вас в тексте мало префиксов пвттерна, поэтому наивный алгоритм оптимален.

Попробуйте провести замеры на паттерны типа: aaaaab

И тексте типа: aaaaaaaaaaaaaaaaaaaa...

Сегодня точно такая же история началась у моей жены. И новая ЭЦП не отображается в личном кабинете. Будем действовать, спасибо за алгоритм!

Ссылка тоже всегда 4 или 8 байт, а нужна она потому что гарантирует неравенство nullptr. Тоесть если вы передаёте указатель вы обязательно должны добавлять эту проверку перед разименоввыванием

У меня, возможно, глупый вопрос. Здесь описан сам метод, но не описано его применение.

Если я правильно понял, этот код компилируется в отдельный бинарник и при запуске выводит название методов, которые были использованы в коде, чтобы потом распарсить эту информацию и как-то использовать её?

Это все нужно чтобы соблюсти принцип you don't pay for what you don't use

Честно говоря не знаю. Может если компилятор не поддерживает rvo

Более того, если возвращать return std::move(expr); то rvo не будет, а будет конструктор перемещения всегда

уже ответили выше


если окрыть коммит, то там будет ссылка на объяснение в котором написано, что это был не pullrequest, а прямой push на их сервер с гитом от имени одного из меинтейнеров

если уж так хочется читаемости без большого количества букв, то никто не мешает


Desciptor desk;
std::string payload;
std::tie(desk, payload) = Process(Options::kSync, new_descriptor);
  return on_data(desk, payload);

или вообще по модному


auto [desk, payload] = Process(Options::kSync, new_descriptor);
  return on_data(desk, payload);

ну, функция всего несколько строк, можно и так:


template<class OnData>
std::string Sample(Descriptor listener,
                   OnData &&onData){
...
}

чтобы можно было с лямбдой вызывать. А тип колбэка проверить концептами

Когда они пришли за блогерами я промолчал

это антипаттерн "позитивное тестирование". Далеко не все разработчики ему подвержены

А ещё они удобны зимой под шапкой, в дождь под капюшоном, на велосипеде/роликах/лыжах/бегом.


К сожалению большие наушники тоже для своей ниши, вот и приходится держать:


  1. Большие для дома
  2. Внутри канальные беспроводные для ситуаций, когда провод не провести от кармана до уха
  3. Проводные для всего остального

Пока сижу на hd215, + китайские kz zsx со съёмным проводом.

вопрос N2 с подвохом))

А как быть с тестом, который иногда падает? Если, допустим, у вас race condition. Такой подход не позволит его отловить. Мне кажется тестовые запуски наоборот, должны падать если любой параметр не такой, как ожидается.

Сильное заявление, учитывая, что эта программа для расчёта

Когда выбирал себе клавиатуру, тоже пришёл в эту проблему, так что напишу, что я по этим пунктам вынес, может кому пригодится.
Я побывал такие клавиатуры: Microsoft ergonomic, type matrix, ergodox(сейчас на ней)


  1. Самая основная проблема это даже не qwerty, это несеметричное расположение клавиш. Это побеждается только физическим изменением корпуса. И только так я смог нажимать, например кнопку "B" указательным пальцем левой руки, а не правой.
  2. Кверти зло — спорить не буду. Однако так много всего интегрировано с кверти, что переход на дворак/колемак/итд возможен только если у тебя 1 комп и только ты за ним сидишь(что проканает на удаленке кстати). И здесь опять побеждает хардверный ремап, так как ставить везде доп раскладку боль
  3. Хоткеи заточены под кверти. Чего только стоит ctrl+c, v, x, z. В ide можно ремапнуть, кое где нельзя
  4. Очень полезно иметь возможность менять кейкоды клавиш для доступа к, например, f13-f24

Обобщая все что я вынес — серебряной пули нету и что софт ремап, что физическая эргономика должны быть 50/50 для уменьшения(но не избавления от) недостатков стандартной клавы.

к сожалению, без профилирования нельзя четко сказать: бесполезный и вредный.


  • ситуация 1: я шарю int и часто к нему обращаюсь. Очень хорошо, что он в одном блоке с control_block и наплевать, что 4байта памяти будут висеть на слабых ссылках
  • ситуация 2: я шарю вектор на 10к элементов и обращаюсь к нему редко. Здесь верно все то, о чем в статье написано

Так что в качестве вывода можно написать, что std::make_shared лучше подходит для малых объектов(до 64 — sizeof(control_block)) и частых обращений. И приводет к подвисанию памяти на больших объектах.


По поводу custom deleter — "не поддерживает" и "не возможно сказать устновлен ли" — это разные характеристики, не правда ли?


По поводу custom new и custom delete — да, но так ли они нужны, когда проще просто залинковать какойнибудь jmalloc?

1

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность