Ответы пользователя по тегу C++
  • Как в С++ из INT сделать string16?

    @SolidMinus
    Из документации:

    String class for 16-bit characters.

    This is an instantiation of the basic_string class template that uses char16_t as the character type


    Тогда как-то так

    int code = ...;
    std::u16string str("");
    
    str += (char16_t)code;
    Ответ написан
  • В какую память попадает строковый литерал?

    @SolidMinus
    Не занесется, верно. Будет передаваться указатель на readonly секцию:

    lea eax, [Адрес]
    push eax
    call foobar


    В некоторых случаях если передается дело в указатель оптимизатор может оптимизировать в read-write секцию. В некоторых, может. gcc точно так не делает, поэтому модифицировать строковый литерал не модифицируя права доступа - не советую :)
    Ответ написан
    Комментировать
  • Как разработать драйвер виртуального устройства на winapi?

    @SolidMinus
    Задание по изучению драйверов на Winapi, хорошо знаю winapi


    Начну с того, что докопаюсь. Драйвера не имеют доступа к WinAPI. Все Вынапи определено в библиотеках уровня пользователя. Драйвера имеют с уровнем ядра и использует NativeAPI из ntoksrnl.exe

    В чём, кроме блокнота, разрабатывать драйвер?


    В редакторе кода *trollface*

    Visual studio + Windows WDK

    https://msdn.microsoft.com/en-us/library/windows/h...

    Что значит создать драйвер виртуального устройства


    Это значит, что будет только драйвер без устройства. Суть в том, что драйвер - это не обязательно связанное с устройствами. Это просто код работающий на 0-м кольце ( в ядре ). Загрузить его можно как и обычно - через службу ( InstDrv делает это все за нас, а после выгрузки удаляет )

    в примере HTTP драйвер винды (да, этот протокол реализован через ядро).
    8787af477cb848e3a14ea3fcbea0306b.PNG

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

    (с сайта rootkit.com)


    О_О

    Сайт с 2006 года мертв :D

    Передай это дино-составителям задачи))

    книги "Руткиты: внедрение в ядро Windows" Г. Хоглунд, Дж. Батлер


    Ну не укладывается, что в универе просят писать руткиты под винду, хоть убей)
    Ответ написан
    1 комментарий
  • Как грамотно работать с указателями в c++?

    @SolidMinus
    Вопрос я честно говоря мало понял. поэтому отвечу как понял.

    И каждый раз будет создание нового указателя


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

    Как же работать правильнее с данным типом данных, вроде здравый смысл говорит что второй вариант "логичнее" и понятнее, особенно когда появляется 10-15 методов обработки 1 кадра. И каждый раз будет создание нового указателя


    Я не совсем понимаю в чем проблема. В выборе способа возврата значений из функции?

    И через this-> и через return скорость одинаковая. Это линейные операторы со сложностью O(1) ( как и все присваивания ) и не должны волновать как либо.

    И, я, честно говоря, совсем не понимаю, зачем браться за довольно сложный для новичка OpenCV если не понимаешь даже что такое указатель?
    Ответ написан
    3 комментария
  • Как читать виртуальную память с помощью winapi?

    @SolidMinus
    Какое-то мутное задание. Читы/трояны/etc?

    VirtualQueryEx - запрос страниц памяти, ReadProcessMemory - прочитать пммять, WriteProcessMemory - записать.
    Ответ написан
    7 комментариев
  • Я изучаю одно а в колледже другое. что делать?

    @SolidMinus
    Ответ написан
    Комментировать
  • В каких случаях эффективнее дублирование кода вместо вызова функции?

    @SolidMinus
    Если вставлять inline функции, то бинарный код в размере очень сильно будет расти, но будет скорость выполнения будет также расти.

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

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

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

    Решается это все настройками оптимизатора на скорость или размер кода. При выставленной оптимизации по размеру кода спецификатор _inline игнорируется.
    Ответ написан
    6 комментариев
  • Какую вы знаете литературу о внутренностях С++?

    @SolidMinus
    Советую по операционным сетям почитать книжки. Все-таки плюсы - компилируемый язык. С полной поддержкой указателей. И изучить хоть чуть-чуть язык ассемблера. Потом пореверсить свои приложения ( главное, простые, дабы не утонуть в листинге асма). Тогда будет понимание, что C++ - это по-сути своеобразный синтаксический сахар для машинного кода, придет и понимание всего всего, что там происходит, за исключенеим процесса компиляции. Во-всяком случае, так было у меня.

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

    P.S. Без CRT кода просто твой C/C++ код компилируется в то, что ты написал. Нет ни единой чужой строчки кода. Ты просто видишь, во что компилируется код и понимаешь что все компилируемые языки это просто упрощение жизни, а не изобретение чего-то нового. Все эти парадигмы все равно сводятся к языку ассемблера, какие бы они не были. Собственно, и интерпретируемые языки - это просто ассемблерный код, анализирующий текст и в зависимости от того че там написано выполняющий какие-то действия.

    Но есть и минус. Придет полное непонимание интерпретируемых языков в плане работы с памятью. Будешь мыслить уже в контексте указателей. Я иногда реально жестко туплю, казалось бы, на простых элементах языка Python.
    Ответ написан
    3 комментария
  • Что есть в C++, чего нет в C#?

    @SolidMinus
    Че за бред холиварный?

    Что есть в отвертке, чего нет в молотке? Молоток может очень многое, даже больше чем отвертка. И шуруп им можно "забить", но будет ли от этого эффект? А отверткой гвоздь не забьешь. Выходит молоток может больше, а отвертка не нужна?

    Языки для разного созданы. C# - чтобы упростить и ускорить разработку прикладных программ, также можно в веб пойти, а плюсы изначально были доработкой си который являлся исключительно системным языком.
    Ответ написан
    1 комментарий
  • Что читать после "Программирование: принципы и практика с использованием C++" Страуструпа?

    @SolidMinus
    В самом низу страницы: https://yandex.ru/jobs/internship/

    C++
    Бьерн Страуструп. Язык программирования C++
    Герб Саттер. Решение сложных задач на С++
    Герб Саттер. Новые сложные задачи на С++
    Г. Саттер, А. Александреску. Стандарты программирования на С++
    Мартин Фаулер. Рефакторинг. Улучшение существующего кода
    Э. Гамма, Р. Хелм, Р. Джонсон и др. Приемы объектно-ориентированного проектирования. Паттерны проектирования
    Эндрю Таненбаум. Современные операционные системы
    Ответ написан
    Комментировать
  • Как создать браузер на C# или C++?

    @SolidMinus
    UPD: сообщение обрезает... почему-то
    UPD2: Защита от cross-site-scripting, из-за блока
    <script>
    вне кода он удалил часть сообщения................


    Народ, вы чего? Автор не говорил, что будет его кодить. Имхо, ему интересно как это делается. Я верно понял?

    Чтобы сделать ядро для браузера надо идти от самого нуля:

    0. Запросы к сети. Реализация http протокола. Прикрутить еще потом SSL/TLS и будет https.
    1. Парсинг домена. распарсить вида domain_name:port, сделать DNS запрос на резолв домена, и в заголовках http указывать host:domain_name, подключаться на port. Он может быть отличным от 80-го, например.
    2. Сделать рендер html. Пишешь движок анализатор хтмла который распределяет элементы по экрану. Если встречается блок script то передает в соответствующий интерпретатор языка, например, javascript.
    3. Сделать обратную связь с юзером. Если он клацает по кнопке на экране, то надо сопоставить эту кнопку с тем, куда она ведет. Далее совершить запрос к той странице и получить ответ.

    итого имеем:

    * Анализатор html/css, рендер графики.
    * Интерпретатор как минимум javascript

    В итоге - свой браузер, это еще сложнее чем свой интерпретатор языка программирования... да...Поэтому если решились сделать свой браузер с нуля - лучше сделайте язык программирования :)))))))
    Ответ написан
    Комментировать
  • Как практиковаться в Си?

    @SolidMinus
    codeforces.com - задачи на подумать, разные языки принимает. Постоянные тренировки, соревнования и огромный архив задач, с автоматической проверкой.

    Например, такие: codeforces.com/gym/101502/problem/E
    Ответ написан
    Комментировать
  • Сколько выделяется памяти под массив в C++?

    @SolidMinus
    sizeof(type) * N, где type - тип, а N - количество элементов, плюс к этому числу добавляется количество байт до такого числа, чтобы оно было кратно выравниванию, как сказали выше.

    Проще говоря, занимает столько, сколько занимает N таких элементов ( для int - 4N байт ) и это число округляется в верхнюю сторону до числа, чтобы было кратным некоторому числу K. Это число K и есть выравнивание, задается в настройках компилятора.

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

    @SolidMinus
    Смотри в сторону reverse VNC

    На линуксе врубаешь в режиме прослушки vnc-server, а на компе обратное подключение в vnc к твоему серверу

    Короче гугли vnc C++
    Ответ написан
    Комментировать
  • Для чего нужны и что делают аллокаторы в С++?

    @SolidMinus
    На хабре есть целый ряд шикарных и понятных статей, например эта:

    Альтернативные аллокаторы памяти
    Ответ написан
    Комментировать
  • Учебный материал по работе с памятью?

    @SolidMinus
    Некропост с длиной в неделю, но предлагаю на C++ использовать unique_prt, share_ptr, make-функции и контейнер std::vector и не париться по поводу очистки и выделения памяти. Звучит страшно, но на самом деле изи

    С++ без new и delete
    Ответ написан
    Комментировать
  • Существует ли литература с примерами практического применения C++?

    @SolidMinus
    C.Прата. Язык программирования C++. 6-е издание - изучение основ языка с практическим применением во всяких консольных программах.

    Д. Рихтер. Создание эффективных Win32-приложений - системное программирование на C++

    В книге Таненбаума "компьютерные сети" есть глава по транспортным протоколам, где автор вводит в сетевое программирование на си.
    Ответ написан
    Комментировать
  • Подойдет ли С++ для изучения, если интересны ИНС и робототехника?

    @SolidMinus
    Программирование на робототехнике не сильно дается. Возможно, зависит от ВУЗа, но это не профильный предмет. На первом курсе готовьтесь много чертить, так как у вас будет стандартный курс инженерных специальностей.

    Лучше на прикладную математику поступайте с такими темами.

    P.S. Сам учусь на робтехе.

    P.P.S. Это не ответ, если что, а просто дополнение к тому, что вы поступаете на 15.03.06
    Ответ написан
    3 комментария