Задать вопрос
  • Запуск программы только если нет запущенного экземпляра у пользователя bat скрипт?

    @Olgeir
    Цепочка find'ов проблему не решит?
    | find /I /N "program.exe">NUL | find /I /N "%username%">NUL
    Ответ написан
    2 комментария
  • Как составить шестнадцатеричное число из байтов?

    includedlibrary
    @includedlibrary
    0xAA имеет тип int (как и все константы: 0xab, 0xcd, 0xef), принимает при сдвиге отрицательное значение. Нужно явно указать тип 0xAA
    #include <stdio.h>
    
    int main(void) {
      unsigned long int a = 0;
    
      a = a | ((0xAB) << 0);
      printf("%lX\n", a);
      a = a | ((0xCD) << 8);
      printf("%lX\n", a);
      a = a | ((0xEF) << 16);
      printf("%lX\n", a);
    
      a = a | ((unsigned long)0xAA << 24);
      printf("%lX\n", a);
    
      return 0;
    }
    Ответ написан
    1 комментарий
  • Сколько килобайтов существует в природе?

    @deliro
    2**(8*1024) == 1090748135619415929462984244733782862448264161996232692431832786189721331849119295216264234525201987223957291796157025273109870820177184063610979765077554799078906298842192989538609825228048205159696851613591638196771886542609324560121290553901886301017900252535799917200010079600026535836800905297805880952350501630195475653911005312364560014847426035293551245843928918752768696279344088055617515694349945406677825140814900616105920256438504578013326493565836047242407382442812245131517757519164899226365743722432277368075027627883045206501792761700945699168497257879683851737049996900961120515655050115561271491492515342105748966629547032786321505730828430221664970324396138635251626409516168005427623435996308921691446181187406395310665404885739434832877428167407495370993511868756359970390117021823616749458620969857006263612082706715408157066575137281027022310927564910276759160520878304632411049364568754920967322982459184763427383790272448438018526977764941072715611580434690827459339991961414242741410599117426060556483763756314527611362658628383368621157993638020878537675545336789915694234433955666315070087213535470255670312004130725495834508357439653828936077080978550578912967907352780054935621561090795845172954115972927479877527738560008204118558930004777748727761853813510493840581861598652211605960308356405941821189714037868726219481498727603653616298856174822413033485438785324024751419417183012281078209729303537372804574372095228703622776363945290869806258422355148507571039619387449629866808188769662815778153079393179093143648340761738581819563002994422790754955061288818308430079648693232179158765918035565216157115402992120276155607873107937477466841528362987708699450152031231862594203085693838944657061346236704234026821102958954951197087076546186622796294536451620756509351018906023773821539532776208676978589731966330308893304665169436185078350641568336944530051437491311298834367265238595404904273455928723949525227184617404367854754610474377019768025576605881038077270707717942221977090385438585844095492116099852538903974655703943973086090930596963360767529964938414598185705963754561497355827813623833288906309004288017321424808663962671333528009232758350873059614118723781422101460198615747386855096896089189180441339558524822867541113212638793675567650340362970031930023397828465318547238244232028015189689660418822976000815437610652254270163595650875433851147123214227266605403581781469090806576468950587661997186505665475715792896


    Хватит?
    Ответ написан
    4 комментария
  • Как получить по одному разу те символы, которые входят одновременно во все три последовательности?

    @galaxy
    Например:
    1. Построить таблицу всех символов unsigned char sym[256];, заполнить нулями
    2. Пройтись по первому массиву: для каждого встреченного символа c установить в таблице sym[c] = 1;
    3. Пройтись по второму массиву: для каждого встреченного символа c установить в таблице sym[c] |= 2; (т.е. установить второй бит в 1)
    4. Пройтись по третьему массиву: для каждого встреченного символа c установить в таблице sym[c] |= 4; (т.е. установить третий бит в 1)
    5. Из таблицы вывести символы со значением 7 (т.е. 1112):
    for (size_t c = 0; c < 256; c++)
      if (sym[c] == 7)
        printf("%c", (unsigned char) c);
    Ответ написан
    6 комментариев
  • Обьясните правда ли эти 2 процессоры очень разные по мощности?

    xez
    @xez
    TL Junior Roo
    Процессор - слишком сложная штука для того чтобы делать вывод о его производительности только по количеству ядер и его частоте.
    До пентиума 4, включительно, все было довольно просто: чем больше мегагерц (а потом гигагерц) - тем процессор быстрее. С тех пор прошло уже 20 лет, кстати.
    У Pentium 4EE частота была уже 3.8Ghz и стало как-то понятно, что дальнейшее ее повышение не дает такого сильного прироста к производительности, как и раньше, да и "стоит" значительно дороже. Поэтому производители начали наращивать количество ядер, увеличивать объем кеш-памяти, и, самое главное, улучшать микроархитектуру (микроархитектуру, вобщем-то, они и так всегда улучшали).

    Вот скриншот из AIDA64:
    61c039d0a31d3774198992.png

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

    Поэтому и существуют многочисленные тесты и бенчмарки, по которым можно понять реальную производительность конкретного процессора в конкретной задаче.
    И да, видимо, i5-2500K быстрее чем Athlon II X4 650
    Ответ написан
    Комментировать
  • Книги по сетевому программированию на c++?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Лучшее в этой области - "UNIX разработка сетевых приложений" Стивенса.
    Ответ написан
    Комментировать
  • Как с помощью for добиться такого же результата, что и командой dir?

    wisgest
    @wisgest
    Не ИТ-специалист
    Справку пробовали почитать: for /??

    Выводит папки и все файлы в папке в виде полного пути.

    Файлы— for с ключом /r. Если нужны подкаталоги, используйте ключи /d /r. В одном списке без перехвата вывода команды dir, скорее всего, нельзя.
    Ответ написан
    Комментировать
  • При записи данных в файл, они остаются в кеше ОС для возможности чтения из кеша?

    gbg
    @gbg Куратор тега Linux
    Любые ответы на любые вопросы
    Важно понимать следующее: нет никакой ложки

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

    Причем момент, когда произойдет сброс, зависит от кучи факторов - программист на это может влиять таким образом:

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

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

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

    Для небольших файлов может быть выгоднее использовать отображение файла на память (mmap), вместо ручного ковыряния с записью-чтением.

    А теперь важный вопрос - как же понять, остаются ли данные в кэше после записи. Да легко.

    -очистите кэш sync; echo 1 > /proc/sys/vm/drop_caches
    -посмотрите, что желтая часть на полоске памяти в htop исчезла
    -запустите DD, запишите на диск гигабайт. (dd if=/dev/urandom of=test.raw bs=8M count=128 status=progress)
    -посмотрите, что у вас нарисовался желтый гигабайт
    -можете потом считать этот файл и увидеть офигительную скорость - выше гигабайта в секунду (у меня получается 6, что очевидно говорит о том, что чтение происходило из RAM). Последнее лучше делать, если писали на HDD - потому что хороший SSD может выдать столько же

    Объективно, этот тест показывает, что ДА, записанные данные остаются болтаться в памяти.

    Но при этом, момент, когда эти данные оттуда уйдут, зависит от множества факторов (скажем, если памяти - в обрез, PageCache пойдет под нож в первую очередь). Так что может оказаться полезным использовать другие стратегии - например, mmap
    Ответ написан
    Комментировать
  • Как перевести char в int?

    Если нужно, например, символ цифры 5 певратить в число 5, то вот так:
    char fiveDigit = '5';
    int fiveNumber = fiveDigit - '0';
    Ответ написан
    Комментировать
  • В чём суть шутки про ноги в С/С++?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега C
    Седой и строгий
    "Выстрелить себе в ногу" - это идиома англоязычного мира, означающая причинение себе вреда необдуманными действиями. Языки C и C++ достаточно низкоуровневые языки, чтобы на них можно было делать опасные вещи. При этом первый вообще никак не контролирует действия программиста и позволяет написать любую ересь, а у второго такое количество тёмных уголков, в которых можно ересь сделать случайно, что не все знают даже спецы с десятилетиями опыта. Эти два совокупных фактора превращают программирование на Сях и Плюсах в изготовление приспособлений для стрельбы по собственным ногам.
    Ответ написан
    Комментировать
  • В чём суть шутки про ноги в С/С++?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Это есть книга такая
    71AE90J735L._SX377_BO1,204,203,200_.gif

    В продолжение веселья https://www-users.cs.york.ac.uk/susan/joke/foot.htm
    Ответ написан
    Комментировать
  • Член класса/структуры типа uint8_t * или int8_t *, оптимизация?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Тут проблема не в том, что член класса char*, а в том, что запись идет в char*, и из-за strict aliasing правил - это может быть запись куда угодно, в том числе в &this. Кешировать пришлось бы любой член структуры, любого типа.

    Эту же проблему можно воспроизвести в меньшем масштабе, если у вас в цикле есть запись в int* и чтение какой-то другой не меняющейся int переменной. Особенно, когда переменная в куче и указатель пришел в параметре функции. Вот компилятор офигеет и будет на каждой итерации ее загружать в регистр заново. Опять же, потому что ну не может он понять, что вот этот вот указатель не указывает на вот эту вот переменную.

    Частично это можно решить кешированием, можно попробовать поменять типы кое где. Но делать это не стоит - это та самая преждевременная оптимизация, о которой писал Кнут. Лучше алгоритм хороший и структуры данных правильные в вашей программе выберите. А уже дальше, если профилирование покажет, что вот тут вот узкое место, то можно смотреть на ассемблерный код и думать, как убедить компилятор геренировать что-то более быстрое.
    Ответ написан
  • Почему в VIM не работает перемещение вверх и вниз?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Перемещение по стрелками и буквам ( j k ) вниз и вверх не работает.

    в любом файле или в одном конкретном? Может быть этот файл состоит из одной единственной строки? Что о нём говорит wc -l <имя файла>?
    Ответ написан
    Комментировать
  • Как соеденить массив строк в одну строку и разделить пробелами?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Если это С++ и вы используете std::string, то можно строки тупо суммировать через +=.

    Если по условию задания вам надо делать все руками, то нужно выделить память, чтобы все поместилось, а дальше можно воспользоваться strcat_s, memcpy или вообще посимвольно копировать.
    Ответ написан
    Комментировать
  • Как получить число?

    @rPman
    (текущее_значение - минимальное_значение) / (максимальное_значение - минимальное_значение)=[0..1]
    Ответ написан
    3 комментария
  • В чём отличие параметров команды mklink (/J, /D, /H)?

    DamianLewis
    @DamianLewis
    Hard Links - можно создавать только на файлы, Junction Points — только на директории, Symbolic Links — на файлы и директории. Это основное и главное отличие между ними. Подробнее можете прочитать тут Ссылки в Windows, символьные и не только. Там также есть ссылки на другие источники.
    Ответ написан
    2 комментария
  • Как сортировать данные структуры по дате, если дата задаётся символьной строкой?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как сортировать данные структуры по дате, если дата задаётся символьной строкой?

    Строки вида yyyymmdd можно сортировать с помощью qsort сравнивая их функцией strcmp.
    Ответ написан
    Комментировать
  • Comparison between pointer and integer. Как решить?

    @Mercury13
    Программист на «си с крестами» и не только
    Несколько вариантов.
    1. pnumber превратить в string
    2. strncmp(s[0].pnumber, std::size(s[0].pnumber), "2") == 0
    3. std::string_view(s[0].pnumber) == "2"
    Прости, глючу, и там. и там нужны двойные кавыки
    Ответ написан
    2 комментария