• Должен ли "шевелиться " штекер в разъёме микро юсб?

    Zoominger
    @Zoominger
    System Integrator
    У меня так бывает с некоторыми девайсами, которые на зарядке часто дёргаешь.
    Помогает сам штекер чуть-чуть сжать сверху и снизу.
    Ответ написан
    Комментировать
  • Почему собственная реализация связного списка выполняет добавление элемента в начало быстрее forward_list?

    WNeZRoS
    @WNeZRoS
    включил оптимизацию, время добавления элементов сравнялось, потребление памяти упало на обоих до 176 МБ


    Размер не соответствует расчётному из-за того что аллокации через new происходит не плотно. Между разными нодами есть память, которая выделена процессу, но не занята полезными данными.

    Можно подсчитать размер потерянной в пустую памяти кодом (для x86):
    std::vector<uint32_t> ptrs;
    ptrs.reserve(list.size);
    for (auto node = list.head; node != nullptr; node = node->nextNode) {
        ptrs.push_back((uint32_t)node);
    }
    
    std::sort(ptrs.begin(), ptrs.end());
    
    uint32_t wastedSpace = 0;
    for (uint32_t i = 1; i < ptrs.size(); i++) {
        wastedSpace += ptrs[i] - ptrs[i - 1] - sizeof(D1List<int>::Node);
    }


    В Debug, forward_list работает медленнее потому что внутри у него много вызовов функций. В Release они оптимизируются и инлайнятся.
    Скорее всего, памяти в Debug используется больше для анализа утечек памяти.
    Ответ написан
    2 комментария
  • Можно ли не дать совершиться нажатию PrtSC?

    hzzzzl
    @hzzzzl
    блин интересно, я даже попробовал :D
    https://codepen.io/anon/pen/gJPZmE?editors=1010
    короче оказывается что keydown не отлавливает кнопку принт скрин, а keyup уже ловит евент ПОСЛЕ ТОГО, как скриншот сделан, ну и в скрине состояние страницы до того как обработчик сработает

    так что да, никак
    Ответ написан
    3 комментария
  • Можно ли не дать совершиться нажатию PrtSC?

    @MamaLuyba
    скриншот - событие винды. ты не можешь скриптом влиять на события винды - только их отслеживать и на них реагировать.
    Ответ написан
    1 комментарий
  • Удалить программу из списка "Открыть с помощью"?

    Zoominger
    @Zoominger Куратор тега Windows
    System Integrator
    Зайдите в реестр:
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.расширение файла\OpenWithList

    Там откройте "папку" с именем .TORRENT и удалите лишнее.
    Ответ написан
    Комментировать
  • Что означает запись int*& arr в параметре функции?

    Очевидно что это ссылка на указатель.
    Ссылка позволяет менять значение переменной вне вызываемой функции. Укатаель, который вы передадите первым параметром функции, будет изменен на newArray.
    Ответ написан
    3 комментария
  • Как происходит создание переменных в Си?

    @res2001
    Developer, ex-admin
    Немного усложните программу, например написав парочку функций, которые определяют еще несколько переменных и что-нибудь в них пишут. В main() вызовите эти функции, а затем объявите test и выведите его значение. Вот тогда у вас гарантированно образуется мусор. При компиляции, нужно еще предотвратить оптимизацию компилятором (опция -O0), а то он может выкинуть вызовы функций, если посчитает, что они не влияют на дальнейшее выполнение программы.

    Что бы понять происходящее, почитайте как работает стек.
    Автоматические переменные определяются на стеке. Одно и то же место на стеке в разное время выполнения программы могут занимать разные переменные. Если вы не инициализируете автоматическую переменную, то она принимет то значение, которое уже лежит в области памяти, которую она занимает. Из-за того, что переменные имеют разный размер, то часто, например текущая 4 байтовая переменная (int) может занимать память, в которой до этого были 2 двух байтовые переменные, или любые другие вариации.
    Стек выделяется при загрузке программы (или при старте потока). В ходе выполнения программы стек не освобождается и не перевыделяется, поэтому мусор (данные от старых автоматических переменных) в нем образуется постоянно. При выходе автоматической переменной из области видимости фактического освобождения памяти не происходит - просто изменяется указатель на стек (регистр sp), т.е. при этом не происходит даже обращения к памяти. Поэтому все ранее сохраненные в стеке значения в памяти остаются. И когда вы определяете новую переменную без инициализации, она занимает ранее освобожденное место и принимает какое-то значение (мусор), которое ранее было сохранено в эту область памяти.
    Ответ написан
    Комментировать
  • Как происходит создание переменных в Си?

    @vanyamba-electronics
    Читаю написанное:

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


    Локальные переменные в функциях создаются выделением памяти на стеке. Например:
    [SP+4] // int text;
    При этом вершина стека просто сдвигается вниз:
    SP = SP - 4;
    Что там находится при этом, никого не интересует - что-то да находится. Поэтому такое значение можно считать мусором.
    Отладчик обычно пишет, что там ноль. Но отладочная сборка отличается от релизной, и там может быть что угодно.
    Ответ написан
    Комментировать
  • Как использовать вектор классов?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Ну только такие методы не должны классу user принадлежать. Было бы лучше создать новый класс, вроде Database, который используется для хранения пользователей. А уж у этого класса можно сделать методы вроде find или sort. Только сигнатура этих методов уже разумеется никаких векторов не содержит: вектор -- это деталь реализации в данном случае, которая может быть изменена потом.
    Ответ написан
    Комментировать