Задать вопрос
  • Почему в ethtool не выводится информация о партнёре?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Почему в ethtool не выводится информация о партнёре?

    Не реализовано в драйвере. Информация о том, что предложил link partner берётся из поля lp_advertising структуры ethtool_cmd, см. Функция igb_get_link_ksettings это поле не заполняет, см. Вот пример функции, которая заполняет, см.
    Ответ написан
    Комментировать
  • Имя массива это адрес первого элемента или указатель на его первый элемент в Си?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    arrOne и arrTwo - это переменные, типов int[5] и int[3][2]. Это на уровне C. Под капотом там указатели: компилятор знает адрес начала массива. Путаницу может вызвать то, что массивы в языке C тождественны указателям на начало с той лишь разницей, что компилятор знает его длину и всякие sizeof() сработают правильно.
    Соответственно, arrOne неявно приводится к int*, а arrTwo к int (*)[2] (указатель на массив из 2 элементов, что в свою очередь неявно приводиться к указателю на указатель на инт).

    Поэтому работает код:
    int a[3][2];
       int (*b)[2];
       b = a;


    Можно считать, что arrOne - указатель на первый элемент int, а arrTwo - указатель на первую строку int[2], по совместительству на первый элемент в первой строке:
    int x = *arrOne;
       int y = **arrTwo; // с одной * не сработает ибо int[2], оно же int* к int не приводиться.
       int *z = arrOne+2; // указатель на 3-ий элемент
       int *w = arrTwo + 1; // указатель на вторую строку (первый элемент в ней).


    Но лучше на закапываться в адрессную арифметику, а воспринимать массивы, как свой отдельный тип данных. Не пишите arrOne+1, а пишите arrOne[1] и не парьтесь.

    Даже для int переменных компилятор знает их адрес, так что там под капотом тоже есть указатель. Не очень большая разница.

    Массив - это индексируемая область памяти. Единственное, о чем надо помнить, что массивы всегда передаются по ссылке. Их дешево передавать в функции и изменения массива внутри всегда видны снаружи.
    Ответ написан
  • Влияет ли, передаёшь ты в функцию аргументы по ссылке или по значению, на производительность и память?

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

    В целом, в С++ хорошее правило - передавать большие переменные как const &.

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

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

    Сразу говорить про все языки программиования нельзя. В некоторых языках вообще все передается по ссылке, в других вообще нет разницы для мелких типов.
    Ответ написан
    Комментировать
  • Как понять что переполняет память в C++?

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

    Потребляет ли много памяти какой-то другой процесс?

    Возможно там утечка каких-то ресурсов, вроде хендлов.

    Каким-нибудь process explorer можно посмотреть сколько хендлов ваша программа имеет, если это число растет, надо разбираться, какие из виндовых объектов вы правильно не уничтожаете. Вроде бы все битмапы вы корректно уничтожаете через DeleteObject, возможно ошибка в другом коде.

    Можно еще поробовать вашу программу подебажить. Вот когда окно вылезает, какой ваш код выполняется? Подключитесь к вашему процессу visual studio и смотрите. Или добавьте отладочный вывод, чтобы понять, какая функция начинает выполнятся но не заканчивает. Это подскажет вам, какие объекты вы не удалили правильно.
    Ответ написан
  • Как исправить некорректное отображение кириллицы?

    Проблема в том, что твоя программа выводит текст в кодировке utf-8, так как файл с кодом имеет такую кодировку, а в консоли на Винде по-умолчанию используются восьмибитные кодовые страницы (для русского языка - это cp866 и cp1251). vscode не виноват.

    Решений несколько:
    1. Поменять кодировку файла
    2. Хранить текст для вывода в консоль в нужной кодировке
    3. Конвертировать текст в нужную кодировку перед выводом в консоль
    4. Поменять кодировку в консоли при помощи chcp на ту, которую использует программа.
    5. Поменять кодировку консоли изнутри программы при помощи setlocale или SetConsoleOutputCP, SetConsoleCP

    С моей точки зрения, самым правильным вариантом будет последний.
    Просто добавь в самое начало main вот такую строку:
    std::setlocale(LC_ALL, "ru_RU.UTF-8");
    И ещё добавь include:
    #include <locale>
    Но обрати внимание, чтобы кодировка файлов оставалась utf-8. Если ты такую строку добавишь в случае, когда у тебя код имеет кодировку 1251 - при выводе снова будут кракозябры.
    Ответ написан
    3 комментария
  • Как анализировать рынок IT, чтобы помочь ребенку с выбором направления?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    В этом возрасте направление надо выбирать интересное, а не востребованное, и быть готовым к тому, что интерес может меняться каждые несколько месяцев.
    Ответ написан
    3 комментария
  • Как анализировать рынок IT, чтобы помочь ребенку с выбором направления?

    Adamos
    @Adamos
    Есть тенденция, которая существует давно и никуда не денется.
    Требуются - программисты, которые не ждут команды и разжеванных заданий, а могут сами начать и кончить.
    Не мечутся в поисках волшебного направления-языка-фреймворка, за который кто-то сразу будет люто платить, а делают проекты на том, что попалось под руку. От начала до конца.
    Внезапно, этот опыт позволяет потом без проблем сменить фреймворк, язык и даже направление.
    Если научишься - работать. А не скакать по верхушкам, хватаясь за интересное и бросая его сразу же, как оказывается, что для углубления в предмет нужно недельку побиться лбом об стену.
    Ответ написан
    Комментировать
  • Как из /128 адреса ipv6 самому себе присвоить /64 или даже /48?

    b1ora
    @b1ora
    Контакты в профиле
    /128 меньше, чем /64, ответ никак, получай как минимум /56 чтобы сделать 16 блоков по /64
    Ответ написан
    4 комментария
  • Стоит ли бежать со стартапа?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    В карьерных решениях более продуктивно уходить не от чего-то, а к чему-то. Можете найти работу с условиями лучше - уходите. Не можете - не уходите.
    Ответ написан
    Комментировать
  • Как лучше реализовать ФС - фото- и видеохранилище?

    anthtml
    @anthtml
    Системный администратор программист радиолюбитель
    1. Предпочтительней - проще работать из виртуалки сразу с хранилищем
    2. Если планируется на луне хранить не только эту виртуалку
    А что мешает миграции в первом варианте? Виртуалка переедет на другой хост вместе со старым таргетом и оттуда также к нему приконнектится, если нужно перенести (увеличить) таргет - то просто его перемонтировать к линю.
    Ответ написан
    1 комментарий
  • Почему я могу изменять состояние объекта хранящийся в const std::unique_ptr и const std::shared_ptr?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Можно сделать указатель на const. Вот этот ваш const, он относится к самому указателю, его нельзя менять (в смысле, на другой адрес). Но после разыменовывания получается не константная ссылка. Вот оно в документации:
    typename std::add_lvalue_reference<T>::type operator*() const


    Там нет никакого const в типе возвращаемого значения, несмотря на то, что оператор можно вызывать у константных экземпляров класса. Зачем конкретно так сделано, я не знаю. Наверно, тут копируется поведение обычных указателей: там тоже можно иметь неизменный указатель на изменяемую область памяти.

    Так что если вы хотите запретить менять объект, то можно сделать так:
    void foo(const std::unique_ptr<const int>& ptr) {
        if (ptr) {
            *ptr += 5; // Ошибка компиляции.
            std::cout << *ptr;
        }
    }
    
    int main() {
        std::unique_ptr<const int> ptr = std::make_unique<const int>(5);
        foo(ptr);
    }


    Правда, придется писать много лишнего кода, если будете передавать неконстантный объект внутрь функции, которая хочет ссылку на константный.

    Но вообще, обычно нет смысла передавать unique_ptr по ссылке. Можно передать по ссылке сам объект, все равно владение в функцию не передается же. И уже там можно навешивать const, если надо. Или, если передавать просто unique_ptr, без ссылки, то даже лишнего кода не надо для обработки const:
    void foo(const std::unique_ptr<const int> ptr) {
    }
    
    int main() {
        std::unique_ptr<int> ptr = std::make_unique<int>(5);
        foo(std::move(ptr));
    }
    Ответ написан
    3 комментария
  • Можно ли использовать не парные Acquire/Release порядки памяти?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    могу ли я использовать Relaxed в 3?

    Если тебе не важно то, что ты при этом можешь пропустить изменение head, то можешь. Но тебе должно быть важно, потому что это же единственная загрузка head в producer_maybe_push().
    Ответ написан
    7 комментариев
  • Как ждать в диапазоне атомарных чисел?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    То, что вы описали в комментариях, это буквально блокировка чтения-записи. Функтор читает данные и может выполнятся параллельно несколько раз, но запись может быть только одна и она блокирует все чтения. Решение описано в википедии: 2 мьютекса, один счетчик. Атомиков не надо.
    Ответ написан
    Комментировать
  • Есть ли прога для фонового доступа к удаленному компьютеру?

    @rPman
    Побуду душнилой.

    При использовании серверных версий windows (того, куда ты хочешь удаленно подключаться), штатный инструмент удаленного управления RDP позволяет подключиться к новому сеансу а администратору подключаться к чужому (mstsc /shadown), так как это штатный механизм, никаких иконок в трее не будет, но будет запрос подтверждения в момент подключения
    Ответ написан
    4 комментария
  • Как с системного SSD диска, переместить нужные файлы на другой?

    @rPman
    Настоятельно рекомендую не пользоваться проводником (майкрософт это пример самой богатой компании мира, не способной сделать адекватный софт за многие годы своего существования), а использовать какой-нибудь адекватный файловый менеджер, например Total Commander или Far Commander

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

    p.s. если пользователь исходной операционной системы в свойствах файла указал флаг - зашифрован (штатная фича ntfs), то прочитать этот файл не получится никак, нужен пароль к аккаунту этого пользователя.
    Ответ написан
    Комментировать
  • От чего зависит время пинга?

    @Akina
    Сетевой и системный админ, SQL-программист.
    На самом деле время пинга складывается из нескольких составляющих. Основные две из них:

    - время, которое тратится промежуточными узлами на передачу до пингуемого узла и обратно;
    - время, которое пингуемый узел тратит на обработку запроса и формирование/отправку ответа.

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

    Что самое противное, ни одну из этих составляющих нельзя измерить надёжно. А тебя по большому счёту, интересует только первая из названных составляющих. Даже на время реакции целевого, конечного, узла можно начхать - на TCP/UDP он будет реагировать гораздо шустрее, чем на пинг, а если будет тормозить, то отвечающий софт, а не передача.

    А на скорость передачи не заморачивайтесь. Пакетики в пинге короткие, частота передачи высокая, так что время передачи пакета от узла к узлу по медному или оптическому кабелю в подавляющем большинстве случаев просто меньше точности измерения времени.
    Ответ написан
    Комментировать
  • Почему длина long int 4 байта?

    @Mercury13
    Программист на «си с крестами» и не только
    Это особенность конкретного ABI (двоичного интерфейса).

    16-битные машины: 1/2/2/4/ (char/short/int/long/long long)
    Win32/64, Linux32: 1/2/4/4/8
    Linux64: 1/2/4/8/8

    И догадываюсь, почему так — это оказался лучший способ пофиксить некоторые старые API Си: таймеры (эпоха Unix, 0=1 янв 1970 00:00) и файлы.
    Ответ написан
    Комментировать
  • Откуда у дисков в windows взялось двоеточие и зачем оно нужно?

    @rPman
    Самое великое историческое легаси, которое тянется со времен CP/M (который был до MS DOS) да и кучи тогдашних ос типа apple dos/Commodore c64/ , в 1970-ых
    Там не было каталогов но были устройства, и файлы именовались "буква устройства" : "имя файла" ну а в DOS добавили каталоги через "\"

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

    От туда же и учет больших и маленьких букв в файловой системе как одинаковых, потому что в тогдашнем fat не было длинных имен (11 символов на имя), и эту кстати лицензионную ловушку майкрософт заложили уже в win95, благодаря которой надоили со всего мира миллиарды.
    Ответ написан
    1 комментарий
  • Почему задерживаются TCP пакеты при печати?

    NeiroNx
    @NeiroNx
    Программист
    Думаю там слишком много "умного" трафика. Я бы ради эксперимента поставил роутер который отсекает весь трафик (мультикасты обязательно, так как по дефолту они умеют между сетями через роутер гулять) кроме прямых TCP 9100.
    Неизвестно какие "умности" там начали глючить после очередного обновления винды.
    Все это SSDP и Join Group по идее нафиг не нужно для печати. Оно только тормозит код прошивки принтера своим бесполезными вызовами.
    Ответ написан
    1 комментарий
  • Действительно ли это реалии рынка?

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