Задать вопрос
  • Могут ли возникнуть проблемы при одновременном чтении и записи в разных потоках переменной?

    @rPman
    без использования синхронизации стандарт говорит что будет неопределенное состояние.

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

    А еще есть кеши процессора, переупорядочивание инструкций или к примеру простой цикл может быть размножен на несколько операций (например четыре повторения но цикл уменьшится в 4 раза), если это будет эффективнее для процессора, и соответственно реально записывать переменную только на каждый шаг цикла, ну а соседний поток будет считывать значение только по по каждому шагу цикла

    Ну и конечно же, внезапно, может все работать как ожидается, без глюков.

    p.s. если size_t не укладывается в битность текущей архитектуры, например будет занимать два слова вместо одного, то и записывать в память будет неатамарным способом, и возможна ситуация, когда соседний поток считывает число из двух половинок, одну с одной итерации цикла, а другую с другой, получив что то типа 0000 9999 -> 0001 0000 число 0000 0000
    Ответ написан
    2 комментария
  • Зачем скрипт виджета юмани сканирует порты компьютера (22,3389 и другие)?

    @MarvinD Автор вопроса
    Пообсуждали тут с товарищем Adamos (за что ему спасибо еще раз!), похоже, что поводов для испуга нет. Сканирование портов используется для определения, не завирусована ли машина пользователя, не открыты ли здесь "лишние порты", такие как удаленное управление компьютером и др. Вопрос закрыт.
    Ответ написан
    2 комментария
  • Не удаётся продолжить выполнение кода, поскольку система не обнаружила sfml-graphics-d-3.dll. Как исправить ошибку?

    @Mercury13
    Программист на «си с крестами» и не только
    Найти, где система сборки создаёт EXE. И положить рядом нужный DLL.
    Ответ написан
    Комментировать
  • C#: почему foreach над массивом структур быстрее, чем for?

    iamkisly
    @iamkisly
    Собираю админки на dotnet и extjs
    Не буду умничать, что foreach это синтаксический сахар над while и IEnumerable / IEnumerator, и как минимум нет проверки условий, вы просто ловите эксепшн, когда нет следущего элемента )) В общем обычно в таких вопросах рекомендуется смотреть в генерируемый IL, тогда будет все понятно
    Ответ написан
    4 комментария
  • Как cpp преобразовать в exe?

    @Mercury13
    Программист на «си с крестами» и не только
    Ищите этот файл в составе MinGW. Большинство сторонних DLL-библиотек используют данную библиотеку в виде DLL, но для отладки (например, если вылет на грани твоей программы и стандартной библиотеки), или если библиотек нет — можно его вставить в EXE.
    Ищите в системе сборки, как добавить ключи:
    в компилятор: -static-libgcc -static-libstdc++
    в линкер: -static -lpthread

    UPD. Вот я собрал мейкфайл. Он при сборке на MinGW будет собирать версию со статически прилинкованными библиотеками.
    cmake_minimum_required(VERSION 3.10.0)
    project(Game VERSION 0.1.0 LANGUAGES C CXX)
    
    if (MINGW)
        add_compile_options(-static-libgcc -static-libstdc++)
        add_link_options(-static -lpthread)	
        if (CMAKE_BUILD_TYPE STREQUAL "Release")
            add_compile_options(-O3)
            add_link_options(-s)
        endif()
    endif()
    
    add_executable(Game main.cpp)
    Ответ написан
  • Как проще всего решать задачи про IP-адреса на C#?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Если вы понимаете, как устроены адреса IPv4, то эту задачу можно решить в уме. Если не понимаете, то вам ни питон, ни сишарп не помогут.
    26 - C61 - C64 = 64 - 6 - 15 = 43
    Ответ написан
    3 комментария
  • Стоит ли переводиться на заочку?

    CityCat4
    @CityCat4
    Дома с переломом ноги
    У меня о заочке самые теплые воспоминания... С учебой, правда, это никак не связано, мы просто учиилсь вместе с Ней :)
    На заочку идут обычно те, кому нужны не знания, а корки. Это понимают все - и студенты и преподы, поэтому знаний (в большинстве случаев) Вы там не получите. Большинство предметов мы пролетали со свистом - женщинам-преподам дарили тортики, мужикам - спасибо, которое булькает... Некоторые правда - преподы старой закалки - не выпускали нас, пока не вбивали в наши головы полагающийся минимум знаний :)
    Заочка - это сессии (в другое время обычно никто ничего не делает, хотя по идее должен :) ). Сессия длится от двадцати до сорока дней, за это время проходят экзамены по предметам, которые были на прошлой сессии и установочные лекции с выдачей заданий на следующую.
    Расписание занятий и обьем нагрузки практически исключает возможность работы в это время, поэтому заранее согласуйте этот вопрос на работе. Формально - работодатель обязан Вам предоставить неоплачиваемый учебный отпуск, фактически - как договоритесь, где-то его дают, где-то люди идут в обычный отпуск и т.д. Сессия раз в полгода, как обычно - в начале года (зимняя) и летом (летняя).
    Ответ написан
    2 комментария
  • Почему не удаётся освободить память в деструкторе?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Проблема вот в этой строчке:
    int get_num_from_BigInteger(BigInteger big_int){

    Тут у вас идет передача по значению. У вас создается новая BigInteger переменная, со значением переданной. Поскольку вы конструктор копирования нигде не определили, компилятор сделал его вам сам, и там он тупо копирует все данные класса, включая указатель arr.
    В итоге у вас получается два экземпляра класса, в каждом из которых указатель на один и тот же массив. Потом каждый из двух экземпляров в деструкторе вызовет free для одного и того же указатенля, вот и получается двойной free и креш.

    Вам надо руководствоватся правилом трех(пяти). Доопределите конструктор копирования. Вообще, вам бы стоило его запретить (= delete;), ибо копировать такие большие числа - это плохо. А в функции ваши передавайте BigInteger по константной ссылке.

    Ну и в других функциях та же самая поблема.

    И еще, в C++ не стоит использовать malloc/free, используйте new/delete. А еще лучше, используйте std::vector.
    Ответ написан
    Комментировать
  • Как принимать деньги от физиков и передавать их другим людям онлайн без юрлица или ИП?

    vabka
    @vabka Куратор тега Веб-разработка
    1. Юридическое лицо обязательно придется завести

    2. Налоговая в любом случае увидит тут признаки дохода и ты будешь обязан взимать НДФЛ с исполнителей, как налоговый агент.
    Вот и требование отчитываться в налоговую.
    Вот тебе, получается, нужно узнавать полные данные и ИНН исполнителей.
    Вот и закон о персональных данных кокетливо машет рукой, а РКН ждёт от тебя стопку бумаг о том, как ты с этими ПД работаешь и как защищаешь. Очень возможно, что придётся ещё потратиться, чтобы всем требованиям соответствовать.

    3. А ещё тут очень легко можно попасть на отмывание денег. Возможно, для того что ты хочешь сделать, нужно ещё получать лицензию. Стоит проконсультироваться с юристом по поводу того, какой у тебя ОКВЭД тут будет.

    4. Учитывая это - я хз как ты собираешься не получать с этого прибыль. Ибо только на то чтобы запустить такой сервис и чтобы он работал придется немало денег вложить и регулярно тратить.

    Без юридического лица можно попробовать крипту, но тут тоже есть нюансы, начиная опять же с комиссий(говорят есть варианты с небольшой комиссией) и волатильности (по идее есть стейблкоины, но и они умеют обваливаться), заканчивая серым статусом, зато всего остального получится избежать.
    Ответ написан
    14 комментариев
  • Почему системник бьет током?

    vxblog
    @vxblog
    Инженер-программист
    Образование электрических зарядов на корпусе никак не связано с силой затяжки болтов.

    Кстати, сам факт наличия статики на корпусе ставит под сомнение наличие заземления, о котором вы упомянули. Ведь в этом случае заряды бы просто не скапливались, а уходили по заземляющему проводнику. Ведь это прямое его назначение - соединять корпус с землёй.

    К сожалению, люди зачастую уверяют, что у них розетки с заземлением. А потом выясняется, что в саму розетку заведены только два провода - ноль и фаза. Без заземления.
    Ответ написан
    4 комментария
  • Какой стандарт C++ изучать?

    @MarkusD Куратор тега C++
    все время мелю чепуху :)
    С. Прата подходит только для самого начала. 2012й год, стандарт C++11 вполне подходит чтобы начать.
    Дальше Прата рассматривать уже незачем. В стандарт нужно вникать самостоятельно, а не через книги.

    Смысла сначала разбираться с последними стандартами особого нет. Код C++ пишется на разных стандартах даже в рамках одного проекта. Редко получается найти достаточно большой коллектив людей, которые один стандарт знают достаточно хорошо. Поэтому люди пишут каждый в своем стиле и со своим знанием.
    И в таком коде надо уметь разбираться. Между стандартами много отличий как в синтаксисе, так и в поведении одного и того же кода. Это надо очень хорошо знать.

    Для систематизации своих знаний очень важно понимать то, почему в следующем стандарте были сделаны именно такие изменения. Поэтому очень важно разбираться по порядку их выхода.
    cfront, C++2.0 и C++98 сегодня иррелевантны. C++03 неактуален из-за изменений в C++11.
    C++11 является самой базой понимания современного C++. С ним нужно разобраться буквально до самых мелочей.
    C++14 является очень важным шагом вперед и его тоже нужно изучить. Важнее всего отличия поведения кода между C++11 и С++14.
    C++17 является радикальным. Помимо прочего в нем оговорен отказ от обратной совместимости стандартов. В нем же сделано больше всего изменений, влияющих на поведение кода. Разница поведения кода до 17-го и после него под час радикальна.

    C++20 сосредоточен на метапрограммировании и времени компиляции, но и других изменений в нем тоже хватает. Отличия от C++17 и более ранних весьма существенны. Но продуктового кода на нем сейчас крайне мало и его еще пару лет можно не брать во внимание.
    C++23 и C++26 пока можно не брать, они даже на уровне трансляторов все еще плохо поддерживаются.

    Из полезного стоит больше всего внимания уделить рабочей версии стандарта: eelis.net/c++draft
    А для быстрого ориентирования очень полезна выжимка изменений в стандартах: https://github.com/AnthonyCalandra/modern-cpp-features

    И самое главное. Не думай что у тебя получится все понять сразу. Люди на этот процесс кладут десятки лет своей рабочей жизни. Тебе их не перепрыгнуть. Но бежать впереди основной серой массы слабоквалифицированных кадров у тебя получится с успехом. И спустя твои десятки лет тебя тоже будут уважать за знания и навыки.
    Ответ написан
    Комментировать
  • Может ли операционная система быть UEFI-приложением?

    15432
    @15432
    Системный программист ^_^
    Конечно можно, по факту это и происходит в ПК - UEFI запускает приложение-загрузчик операционной системы. От вашего запроса отличается только тем, что ресурсы лежат в виде отдельных файлов на диске. Запакуй всё в один исполняемый файл, который сразу раскидает ось по оперативки - вот вам и приложение-операционка
    Ответ написан
    Комментировать
  • Windows 7. Где могут прятаться 35 ГБ?

    hint000
    @hint000
    у админа три руки
    Подавляющее большинство файлов занимают на диске больше места, чем их размер. Потому что место в файловой системе выделяется кластерами. Файл может занимать 1 целый кластер и ещё 1 байт, а ему выделено уже два кластера - в один он не поместился, а часть кластера выделить нельзя.
    Чем больше мелких файлов, тем больше потери.

    А кроме этих простых и понятных потерь ещё есть:
    https://ru.wikipedia.org/wiki/Альтернативные_поток...
    Ответ написан
    5 комментариев
  • Откуда появляется это странное число?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Читайте код внимательно:
    Ввод:
    for (int i=0; i<x; i++){

    Вывод:
    for (int i = 0; i <= x; i++){

    У вас там <= в конце. Из-за этого идет обращение к элементу по индексу x, за границей массива. И оттуда выводится какой-то мусор - это и есть ваше странное число.
    Ответ написан
    Комментировать
  • Что именно дают миллиарды транзисторов в процессоре для работы программы?

    15432
    @15432
    Системный программист ^_^
    1) Больше фич. Всякие AVX, MMX, а также умная конвейеризация, Hyper-Threading, спекулятивное исполнение, предсказание веток - при правильном применении сильно ускоряет вычисление
    2) Больше ядер. В один кристалл всё больше процессорных ядер запихивают, можно распараллелить задачи, тоже получим прирост в скорости работы
    3) Больше кэш-памяти. Та самая SRAM, которая входит в процессор и тоже состоит из транзисторов. Сильно ускоряет работу с памятью и задержки выполнения инструкций
    4) Больше контроллеров. В процы сейчас встраивают всё, что попало - шины данных, контроллер DRAM, PCIE, северный мост, отдельное ядро сопроцессора (Intel ME, AMD PSP), GPU и даже NPU где-то добавляют. Тоже считается за "больше транзисторов".
    Ответ написан
    4 комментария
  • Почему не запускается Docker на гостевом аккаунте Windows?

    @dronmaxman
    VoIP Administrator
    https://docs.docker.com/desktop/install/windows-in...

    If your administrator account is different to your user account, you must add the user to the docker-users group:

    Run Computer Management as an administrator.
    Navigate to Local Users and Groups > Groups > docker-users.
    Right-click to add the user to the group.
    Sign out and sign back in for the changes to take effect.
    Ответ написан
    5 комментариев
  • Каков принцип взаимодействия stream с программой?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    iostream - лишь обертка над системными вызовами. Входной и выходной потоки - это концепция системы.

    Это целый набор шаблонных классов, которые переопределяют операции побитового сдвига, поэтому у вас в программе используются << и >>. Под капотом это все доходит до системных вызовов, которые пишут или читают данные в системные потоки (pipe). Там тупо команды "запиши вот эти байты" и "отдай мне вот в этот буфер максимум столько-то байт".

    Система, насколько я знаю, для каждого pipe'а поддерживает какой-нибудь кольцевой буфер в который процессы могут писать и читать оттуда, через системные вызовы выше.

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

    ОС-ка поддерживает список потоков, которые ждут чтения из каждого буфера. Когда что-то в буфер записывается, эти потоки просыпаются.
    Ответ написан
    1 комментарий
  • Как разумно поставить себе начало в программировании (C++ и C#)?

    1. C++ - это не единственный способ хорошо понять, как работает компьютер. Раз уж это первый язык, то я бы смотрел сразу в сторону Rust, тк он также сразу учит тебя тому, как можно управлять памятью.

    2. Ты даже не представляешь, на сколько много людей в индустрии построили успешную карьеру, хотя в принципе компьютер впервые увидели только в университете. Так что нет, точно не поздно.

    3. Просто открываешь книгу или курс и читаешь, делаешь всё более и сложные проекты. Всё.
    Выбирая литературу - смотри на автора и отзывы.

    4. Если хочешь начать карьеру с C++, то тут мастхев будет диплом какого-нибудь хорошего вуза, чтобы тебя рассматривали всерьёз. (тоесть закладывай ещё +3 года после окончания колледжа).
    Хотя опять же - начинать карьеру с C++ сейчас - это крайней сомнительный выбор, если не геймдев, конечно.
    Для джуна в принципе разницы нет - на любом стеке тебе будет крайне тяжело найти первую работу.
    Для опытного аналогично, но наоборот - на любом стеке, если он не совсем мёртвый, найти работу будет вполне реально. (в худшем случае пара месяцев на поиск наиболее вкусного предложения).
    Сам в вполне успешно получал оффер на такую экзотику, как F#, а сейчас вообще пишу на Rust.
    Ответ написан
    5 комментариев
  • Как разумно поставить себе начало в программировании (C++ и C#)?

    saboteur_kiev
    @saboteur_kiev Куратор тега C++
    software engineer
    C++ является одним из сложных ЯП... блабла...Я осознаю, что для меня это слишком серьёзное и тяжелое начало

    Я разобрался как работает стек и как адресуется память в пятом классе без интернета и практически без документации. Была какая-то книжка по С++, которую просто перечитал раза 3-4, пока не понял смысл.

    На протяжении обучения в школе я размышлял о начале изучения языка программирования.

    Вопрос заключается в успешном изучении, чтобы уже с багажом умений начать свой путь в трудоустройство.


    Чувак, ты слишком много размышляешь и мало делаешь. Нет какого-то оптимизирующего волшебства, который может значительно сократить твой путь. Ты должен писать код. Много кода.
    А ты занимаешься фигней типа анализируешь трудоустройство еще даже не поняв, а можешь ли ты вообще что-то.
    Ты должен понимать, что если ты можешь написать, например, крестики нолики или морской бой - это еще не значит что ты станешь программистом и сможешь этим зарабатывать. Это просто любитель. Но ты даже этого уровня не достиг, а уже хочешь анализировать тренды и тем более подсчитывать предполагаемый заработок, до которого еще годы пути. Ты посмотри на политику в стране, никто не знает что будет через год.

    Если ты оцениваешь знания школьными мерками (типа экзамен сдал), то пора вырасти из этого статуса и переходить на оценку "я могу сделать вот это, оно будет работаь". Насколько красиво - это уже другой вопрос. Если ты можешь писать рабочий продукт, уже потом можно начинать его шлифовать и читать про красивый код.
    С нуля сложная архитектура сильно мешает, потому что не достаточно фундамента чтобы понимать почему именно вот это решение красивое а это нет.

    Если тебе интересна разработка и в будущем планируешь стать айтишником - просто бери и работай с компом. Пиши программы, сайты, поделки, настраивай что-то, интегрируй. Набирай фундамент. Интенсивность - по своему увлечению.
    В какой-то момент сможешь понять что тебе приятнее заходит, тогда может быть начнешь продвигаться уже в более узкой области, в конкретном языке, технологии. Специализация обычно начинается на уровне ну хотя бы джуниор, а не новичок/стажер.

    А про трудоустройство начинай думать, когда при прочтении описания вакансии ты считаешь, что 50-60% ты знаешь.
    Ответ написан
    12 комментариев
  • Зачем использовать кучу если есть стек? а так же где применяются указатели и ссылки?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Проблема стека в том, что там лежат только локальные данные, которые исчезнут вместе с выходом из функции. Кроме того, обычно размер всех переменных на стеке известен во время компиляции. Некоторые языки умеют выделять на стеке массивы переменной длины, но даже не все C++ компиляторы так умеют. В самом стандарте языка c++ - таких масивов нет. Поэтому стек часто не подходит.

    Помимо стека и кучи, есть еще глобальные переменные - но там проблема в том, что все они жестко определены во время компиляции.

    Т.е. если вам нужны данные доступные вне какой-то функции, да еще их точный размер и/или количество неизвестно на этапе компиляции - вам нужно что-то кроме стека и глобальных переменных. Это и есть куча.
    Ответ написан
    4 комментария