Задать вопрос
  • Есть ли смысл в handles вместо сырых указателей для аллокации памяти в embedded устройствах?

    @res2001
    А вы планируете вытесняемую многозадачность реализовывать или кооперативную? Ядер сколько на вашей железке?
    При вытесняемой надо будет блокировать хэндл на мьютексе при попытке доступа к памяти по нему и освобождать после доступа.
    В кооперативном варианте на одном ядре этого, видимо, можно избежать. На нескольких ядрах уже начнется конкуренция.
    Написано
  • Есть ли смысл в handles вместо сырых указателей для аллокации памяти в embedded устройствах?

    @res2001
    Catmengi, Какие например метаданные могут быть не известны в compile time?
    Если пользователю понадобятся добавить к хэндлу свои данные, то он просто объявит свою структуру, хэндл и метаданные положит в эту структуру. В общем как обычно делаются обертки вокруг системных функций.
    Вообще в хэндле в качестве метаданных будет некая информация, которая будет необходима вашему дефрагментатору для работы. С их набором вы определитесь, когда будете его писать.
    Пока же можно просто положить в структуру хэндла указатель на реальные данные.
    Написано
  • Есть ли смысл в handles вместо сырых указателей для аллокации памяти в embedded устройствах?

    @res2001
    Catmengi,
    но от маленькой долго живущей аллокации в середине кучи он не защитит

    Для дефрагментации "на лету" хэндлы выглядят нормальным решением.
    Написано
  • Есть ли смысл в handles вместо сырых указателей для аллокации памяти в embedded устройствах?

    @res2001
    Catmengi, Если массив хэндлов выделять динамически в той же куче, то он сам будет попадать под операцию дефрагментации и может быть перемещен дефрагментатором и тогда все хэндлы станут не действительны.
    В таком случае вам, видимо, надо будет делать 2 кучи. Одну по меньше для разных "системных" нужд, где память не будет принудительно дефрагментироваться и где аллокатор будет выдавать прямые указатели. И вторую на которой будет работать дефрагментатор и память будет выдаваться через хэндлы.
    Ну или как-то по другому это обходить.
    Думаю, что массив хэндлов, который нельзя перемещать, окажется не единственным подобным объектом в вашей системе.
    Написано
  • Есть ли смысл в handles вместо сырых указателей для аллокации памяти в embedded устройствах?

    @res2001
    А где будете выделять память под handles? Судя по описанию это должен быть какой-то статический массив фиксированного размера не в общей куче.
    Для борьбы с фрагментацией идея выглядит здравой. Но с другой стороны, возможно, лучше использовать какой-то аллокатор, в котором уже реализована логика дефрагментации.
    Написано
  • Как ждать в диапазоне атомарных чисел?

    @res2001
    Интересно зачем в С++20 добавили в атомарные объекты блокирующий метод wait?
    Написано
  • Как ждать в диапазоне атомарных чисел?

    @res2001
    Павел Соколов, Если нужно читать данные в разных потоках, которые иногда изменяются 1 потоком, то можно сделать примерно следующую схему:
    void writer(data d) {
      atomic_fetch_add(v1, 1);
       write(d);
      atomic_fetch_add(v2, 1);
    }
    
    data reader() {
      int lv1, lv2;
      data d;
      do {
        lv2 = atomic_load(v2);
        d = read();
        lv1 = atomic_load(v1);
      } while(lv1 != lv2);
      return d;
    }

    Счетчики циклов записи последовательно инкрементируются писателем. При чтении операция может считаться успешной, только если считанные счетчики циклов записи равны (т.е. при чтении в промежутке не было операции записи). При этом важен порядок инкремента и чтения счетчиков.
    Если операции записи будут не частыми, то чтения почти всегда будут завершаться за одну итерацию.
    Этот подход подсмотрел при чтении NTP демоном GPS данных при работе GPS источника времени.

    В этой схеме теоретически поток записи может быть вытеснен в процессе записи (после инкремента v1) на достаточно долгое время. Но если все потоки имеют один и тот же приоритет, то поток записи получит свой процессор. Так же можно при чтении на повторных циклах вызывать yield(), чтоб ускорить возвращение потока записи в работу. Но это не обязательно, в типичных случаях схема работает и в таком виде.

    Сами по себе операции чтения и записи должны быть достаточно короткие, никакого ввода/вывода и т.п. долгоиграющих операций, только чтение/запись памяти. Если это условие не соблюдается то rwlock вам в помощь.

    Для еще большего ускорения можно поиграть с explicit вариантами атомарных функций и указания memory order вручную - на v1 может быть установлен relaxed порядок, на v2 acquire/release.
    Так же стоит разнести в памяти v1 и v2 друг от друга минимум на размер кэшлинии (обычно 64 байта), это предотвратит не нужные синхронизации, которые появятся, если v1 и v2 попадут в одну кэш линию. Это еще придаст буста операциям.
    Написано
  • Есть ли прога для фонового доступа к удаленному компьютеру?

    @res2001
    rPman, Про remote assistant я в курсе, но там много ограничений, поэтому мне не подошел.
    Вариант с rdpwrap работал исправно.
    IPMI и прочие vPro механизмы требуют аппаратной поддержки.
    rdpwrap сломали еще лет 5 назад

    Посмотрел на гитхабе - заявлена поддержка только Вин10. Похоже разраб перестал поддерживать проект.
    Беглый гуглеж показывает, что вроде бы можно заставить работать или сделать, то что делает rdpwrap руками:
    https://dicom.spb.ru/articles/configuring-the-oper...

    Но похоже, это уже реанимация трупа.
    Разве что кто-нибудь сделал форк и продолжает проект возможно под другим именем.
    Написано
  • Есть ли прога для фонового доступа к удаленному компьютеру?

    @res2001
    Shadow можно использовать и для подключения к сессиям на Windows ПК пользователей, не среверных версий.
    https://winitpro.ru/index.php/2014/02/12/rds-shado...
    https://winitpro.ru/index.php/2018/07/11/rdp-shado...
    Использовал в свое время описанный тут механизм для организации своего рода help desk для сотрудников конторы.
    Не смотрите, что версии винды тут довольно старые, сам механизм еще более старый, я использовал его начиная с XP и Win2003. Правда в каком-то релизе Win2008 поддержку shadow убрали, но в следующем уже вернули обратно. Работает ли это с актуальными версиями винды я не в курсе, надо проверять.

    Если рабочий стол пользователя не нужен (т.е. для удаленного подключения будет создана своя сессия с собственным рабочим столом и т.п.), то не нужно и shadow. На десктопной винде ограничение на одну сессию можно снять с помощью rdpwrap (если что, это нарушение лицензионного соглашение).
    Написано
  • Что определяет выбор адреса сайта из всех, возвращённых DNS-сервером?

    @res2001
    Akina,
    Но меня интересуют именно причины стабильности того, что часть станций справляется с проблемой, а другая нет.

    Такое впечатление, что там где сайт не доступен ответ от ДНС сервера приходит другой (возможно там отсутствует правильный адрес или еще что).
    Написано
  • Как правильно организовать сеть на даче?

    @res2001
    У меня на даче баня в 20 м от дома, кинул туда кабель, т.к. все было на этапе строительства бани, то кабель кинул вместе с электричеством и водопроводом в одной траншее хорошо заглубленной (это больше для водопровода нужно).
    2 WiFi роутера в доме и в бане, даже не меш, а обычные бюджетные с разными именами SSID, покрывают примерно 2/3 участка, самое популярное место перекрывается с обоих сторон (из бани и из дома). На дальних концах участка WiFi не достает, но оно там и не надо по факту. Если приспичит покрыть всю территорию, то можно будет что-нибудь организовать, но пока и этого хватает.
    Написано
  • Как с системного SSD диска, переместить нужные файлы на другой?

    @res2001
    1. Если диск был зашифрован виндовым битлокером, то слить файлы в "чужой" винде скорее всего не получится. Это можно сделать при определенных условиях, но потребуется глубже разобраться с вопросом.
    2. Если же не был зашифрован
    2.1 просто запустите любом файловый менеджер под администратором и делайте все что нужно (вместо файлового менеджера можно запустить под админом командную строку винды cmd и с помощью команд так же скопировать что нужно).
    2.2 Другой вариант - изменить права на каталог (дать доступ себе любимому), для этого так же потребуется повышение привилегий на эту операцию, кроме того, если этот диск потом будет возвращен в родной ПК и дальше будет работать, то это действие может нарушить безопасность родной системы.
    Написано
  • От чего скачки и почему при доступной более половины озу, пишет что его не хватает?

    @res2001
    historydev, Попытайтесь определить какой конкретно процесс вызывает повышенную загрузку ЦПУ и HDD в период зависания. И может можно будет что-нибудь сделать, применительно к этому процессу, чтоб он больше так себя не вел.
    Т.к. сама голая винда подобных симптомов обычно не вызывает, то причина, видимо, в каком-то установленном софте или драйвере.
    Написано
  • Можно ли зафиксировать размер столбцов в Windows?

    @res2001
    В папке можно создать скрытый файл desktop.ini и положить туда настройки для папки. Поищите описание опций отображения для этого каталога, думаю у микрософта в доке должно быть. С помощью этого файла можно много чего регулировать. Правда работает это только для стандартного проводника, но вам это и нужно.
    Для примера можете посмотреть содержимое этих файлов в каталоге Desktop или Download пользовательского профиля.
    Написано
  • Как заставить CMake работать только с нужным компилятором?

    @res2001
    hitakiri,
    это не отвечает на вопрос, "почему не работает сразу?"

    Какой компилятор "сразу" из двух доступных должен выбирать cmake?
    В этом случае требуется от пользователя подсказка. Та подсказка, которую ты пытался ему дать, была сделана не так, как это предполагает cmake, поэтому он ее не понял. Для подобных типовых ситуаций у нормальных инструментов уже есть свои варианты обхода, надо просто их использовать.
    "стандарт сборки в мире C++"

    В мире С++ нет стандарта сборки, каждый ... собирает как хочет.
    Есть как минимум несколько достаточно популярных систем сборки. Даже не факт, что cmake из них самый популярный, хотя "один из" точно.
    Можешь попробовать meson, например. Довольно интересная штука с питоном внутри. Но там своих нюансов то же хватает.

    В телеге есть группа по системам сборки: @probuildsystems
    Написано
  • SSTP сервер на Linux, как?

    @res2001
    Довольный Айтишникъ, Действительно. Извиняюсь.
    По серверной части SSTP для линукса сказать не чего.
    Сам использую OpenConnect для ВПН. SSTP - только если винда на сервере.
    Написано
  • Как заставить CMake работать только с нужным компилятором?

    @res2001
    hitakiri, Про генераторы (-G) в cmake я неоднократно упоминал выше :-)
    Ключи -B и -S просто указывают нужные каталоги.
    Краткое описание всех трех (а так же список доступных генераторов) можно найти тут: cmake --help
    Так же у cmake весьма не плохая документация на их сайте. Рекомендую.

    И да, такие моменты немного разочаровывают ... надеешься что тебе дадут инструмент который работает, а в итоге получаешь колхозный кобайн (это я про cmake), с которым надо регулярно "проводить ночь".

    У cmake масса возможностей, стоит изучить его получше и не делать поспешных выводов.
    Написано
  • Как заставить CMake работать только с нужным компилятором?

    @res2001
    hitakiri,
    winget

    Микрософт доросла до собственного пакетного менеджера :-) не знал ... уже несколько лет не слежу, что там делается у микрософта. И командная строка, у вас, похоже, не cmd, а posh. Разница вполне может быть.

    Тогда у вас 2 варианта: задавать генератор или тулчейн файл. Думаю оба способа решат ваш вопрос. Правда с генератором может быть конфликт с gcc, если он у вас то же окажется в системе. Не понятно, что в этом случае выберет cmake.
    Лично я предпочитаю указывать генератор. В cmakelists я бы просто ошибку выдал, если сборка не шлангом.
    Написано
  • Как заставить CMake работать только с нужным компилятором?

    @res2001
    hitakiri,
    смена командной строки ситуацию не изменила.

    Что cmake продолжает находить cl? Сам cmake как установлен? Как установлен шланг?
    Например cmake может быть установлен как часть MSVS, тогда думаю, бесполезно его будет отучать обнаруживать cl.
    Я обычно использую cmake из msys2 и если надо собирать с помощью cl, то запускаю cmake из ком.строки MSVS и указываю генератор руками. А если не надо, то из стандартного cmd.exe или из ком.строки msys2.
    Написано