Anatoly
или ты говоришь, что до deallocate не дойдет?
Matwey
deallocate нужно делать руками
Matwey
ты его не делай руками и всё будет хорошо
Matwey
но большого смысла обсуждать как оно будет глючить я не вижу. нужен алокатор в unique_ptr, напиши свой deleter
Anonymous
В текущих имплементациях gcc и clang не падают, ибо в их реализациях std::allocate зовет под капотом new[]. msvc падает если размер буфера больше 4096.
Anonymous
Оказалось что в головах разработчиков allocate == new[], а deallocate == delete[].
PRoSToC0der
Б 411
411 это code point юникодовский
Andy
411 это code point юникодовский
в файле куда я записал сырые данные именно такие коды для русского
PRoSToC0der
в файле куда я записал сырые данные именно такие коды для русского
ну это точно utf-16/ucs-2, а чтобы узнать точнее надо какой-нибудь символ находящийся за базовой плоскостью юзнуть, но скорее всего это utf-16
Andy
типа китайского ?
PRoSToC0der
типа китайского ?
https://unicode-table.com/ru/1F603/ можно и этот
PRoSToC0der
а для конвертации из utf-16 в utf-8 в первом приближении можно заюзать это http://en.cppreference.com/w/cpp/locale/codecvt_utf8_utf16
PRoSToC0der
не обязательно. может быть std::allocator под капотом делает new/delete
http://en.cppreference.com/w/cpp/memory/allocator/allocate Allocates n * sizeof(T) bytes of uninitialized storage by calling ::operator new(std::size_t) or ::operator new(std::size_t, std::align_val_t) (since C++17), but it is unspecified when and how this function is called. По сути он может один раз (пока не кончится) большой блок аллоцировать и потом возвращать отдельные куски из него
Andy
https://unicode-table.com/ru/1F603/ можно и этот
попробовал в файле эта мордочка записалась 4я байтами
Andy
обычный текст и русские - по 2 байта а этот символ 4я
Aleksandr
Всем привет, подкиньте идей по чтению любых файлов в бинарном виде для дальнейшей передачи данных в соккет.
Andy
значит utf-16
UTF-16LE 3D D8 03 DE
Andy
именно эти 4 байта оказались в файла:) ну спасибо хоть точно знаю теперь что они туда засунули
Andy
значит utf-16
а как передать сырые данные типа этих в шарп с длл на с++ не знаете ? перебрал кучу вариантов, с простым текстом получается, а надо произвольный блок данных типа этого
PRoSToC0der
здесь по сути нужно передать что-то вроде byte[]
Andy
не могу сейчас точно сказать больше десятков вариантов уже и не знаю какой работал меня просто текст не устравал DllImport, маршалинг со стороны шарпа и без него сам параметр как StringBuilder, IntPtrm, string
Andy
в шарпе есть тоже библиотеки для leveldb но одна только заработала немного но не совсем наверное тоже проблема в ней внутри с перекодировкой в хромиуме даже ключи имеют нули внутри себя в этой базе и именно те что мне нужны как раз с нулями
Andy
наверное внутри библиотеки на шарпе отсекается та часть что после нуля в итоге итератор при проходе не видит всех записей у которых ключ с нулями внутри строк
PRoSToC0der
https://stackoverflow.com/questions/5072340/c-sharp-marshalling-double-from-c-dll https://stackoverflow.com/questions/16461057/returning-data-from-c-method-written-in-the-c-dll-into-c-sharp
PRoSToC0der
можно попробовать в два этапа: 1. запрос размера данных 2. создание массива байтов необходимого размера и его передача
Matwey
http://en.cppreference.com/w/cpp/memory/allocator/allocate Allocates n * sizeof(T) bytes of uninitialized storage by calling ::operator new(std::size_t) or ::operator new(std::size_t, std::align_val_t) (since C++17), but it is unspecified when and how this function is called. По сути он может один раз (пока не кончится) большой блок аллоцировать и потом возвращать отдельные куски из него
Ну нечего добавить, это лишь значит что в зависимости от реализации что-то может сломаться, а может вдруг и не сломаться. А, учитывая, что сделать нормально все-равно проще чем обсуждать где сломается, надо сразу впилить кастомный deleter.
Matwey
Я кстати хочу добавить что в STL есть allocate_shared
Matwey
а allocate_unique нету
Matwey
Хотя должен быть
Matwey
А allocate_shared делает именно то, что просили. Выделяет для shared_ptr память через allocator
Matwey
Господа, объясните мне еще про enable_shared_from_this. Я вот подсмотрел типовую реализацию в Boost, и ничего сверхъестественного там не увидал. enable_shared_from_this<T> состоит из члена weak_ptr<T>, который инициализируется в глубинах конструктора shared_ptr<T>, который очевидно может разобраться, что T унаследован от enable_shared_from_this<T> и, соответственно, пойти ему поле перезаписать. А теперь вопрос, почему есть std::enable_shared_from_this::shared_from_this, но нету std::enable_shared_from_this::weak_from_this, который бы просто вернул это поле как есть?
Matwey
Правда твоя, есть в C++17
Matwey
Ого, еще и поведение у shared_from_this поменяли в C++17. А то меня всегда беспокоило, что производные enable_shared_from_this нельзя создать руками (не внутри shared_ptr<> ), иначе shared_from_this() приводит к падению. А вдруг рука дрогнет?
Matwey
В С++17 добавили "прочитать weak" (кажется)
Т.е. отсутсвие weak_from_this не специально так, а просто не успели доделалть в C++11?
Constantine
Т.е. отсутсвие weak_from_this не специально так, а просто не успели доделалть в C++11?
Нет, там просто почему-то нет запроса weak_from_this в enable_shared_from_this
Constantine
Если они еще сделают что френдить для make_shared, вообще можно будет пользоваться
Wire
Народ, кто работал с boost::asio::deadline_timer? Странное наблюдаю: если вызывать вот так: class Wrapper { ioservice io; deadline_timer timer; public: Wrapper() : io(), timer(io){} }; То на Винде у меня какой-то дедлок - и видно, что создается какой-то второй тред (хотя явно я это не делаю). На Линуксе тот же код работает без проблем. Компилятор mingw32. Воркэраунд — вынести создание timer из конструктора Wrapper... Кто-нибудь может объяснить, что просиходит?)
Matwey
Загадочно, учитывая, что создание таймера его не запускает.
Wire
Загадочно, учитывая, что создание таймера его не запускает.
Вот именно... Но в дебаггере чётко вижу 2 треда, и дедлок именно в конструкторе таймера...
Matwey
Если они еще сделают что френдить для make_shared, вообще можно будет пользоваться
Ну либо так, чтобы можно было объект создать только через make_shared() потому-что конструктор приватный.
Anonymous
Привет, родные братья сестры, нужна помощь по сипп, контроллер лютует грозится, надо обкашлять вопросики по памяти помогите плес
Anonymous
маякните когда можно задавать ответы
Vladislav
Привет, ну задавай)
Anonymous
Привет, ну задавай)
скрин скинуть нельзя чтоли ?
Ostap ꑭ
https://www.engadget.com/amp/2018/04/09/nvidia-32-bit-os-support-drivers/
Anonymous
Окей, но причем тут c++?
Ну как, драйвера на C++ написаны же.
Maksym
На сях чистых не?
Vladislav
На сях чистых не?
Вангую что так
Maksym
В кернеле ещё обычно из стд либы мало что порторировано, если верить бывшим коллегам
Anonymous
На сях чистых не?
Последний раз когда я их видел это были голимые плюсы :)
Maksym
Последний раз когда я их видел это были голимые плюсы :)
Ну вот я писал выше, как минимум в виндовом кернеле функционал ограничен и многие плюсовые плюхи недоступны.
Anonymous
Виндовый кернел это вещь в себе и к nvidia драйверам отношения не имеет. Могу глянуть, но думаю там тоже не везде чистый си
Danil
а ты в нвидии работал?
Зачем работать в нвидии чтоб смотреть их драйвера?
Vladislav
Зачем работать в нвидии чтоб смотреть их драйвера?
чтобы смотреть в исходники - нужно
Danil
чтобы смотреть в исходники - нужно
Линуксовые же локально распаковываются и собираются
Danil
Или там только кернель модуль?
Vladislav
Линуксовые же локально распаковываются и собираются
только тонкий слой совместимости, если я правильно понимаю
Vladislav
Да
круто) ты случайно не в курсе зачем там собирают либы с -fomit-frame-pointer?)
Anonymous
круто) ты случайно не в курсе зачем там собирают либы с -fomit-frame-pointer?)
Если честно - нет. Могу предположить, что чтоб сложней было в кишочках копаться :)
Vladislav
:( из-за этого и профайлить приложения, использующие их, сложнее)
Anonymous
А еще, ты скорей всего говоришь о чем-то связанном с cuda/dnn, а я этого не трогал и как у них что и почему не представляю
ed
лень читать весь диалог. не пробовал просто переопределить new глобально, раз уж хочется проблем?
Не пробовал и не буду.. Я не хочу переопределять new! new вероятно мне пригодится в будущем.. Да и что что, а вот это действительно выглядит как костыль, к тому же ещё и нифига неочевидный..
ed
на костыльную задачу - костыльное решение 😊
Свой менеджер памяти в c++ С каких пор это костыльная задача?
Александр
Свой менеджер памяти в c++ С каких пор это костыльная задача?
выше уже писали, что такими вещами занимается аллокатор
Александр
и переопределение new - как раз-таки типичный способ глобально поменять поведение
ed
Велосипед - согласен.. Но увы мне нужен полный контроль над выделением памяти.. std аллокаторы по моему вообще не о чём (слишком много писанины и переопределения, да и помимо аллокаций мне нужны свои контейнеры(ибо стандартные тоже не устраивают)) Опять же, да у меня тут прекрасно осознанное велосипедо-строение, но называть это костылями как минимум недальновидно..
ed
На самом деле меня прямо разочаровала реакция людей на вопрос.. Вроде бы c++ сообщество.. А меня тут понимаете ли за свой аллокатор осуждают :c
Maksym
никто тебя не осуждает