Подтвердить что ты не робот

Программирование тонких программ на С++ (например, uTorrent) для Windows

Я всегда восхищался оригинальной программой uTorrent. Он выглядел великолепно, был меньше 64 КБ, был очень быстрым и имел все функции, в которых я нуждался. К сожалению, программа закрыта источником (и становится все более раздутой с каждым днем), поэтому я прихожу к Stackoverflow для вдохновения.

Какие методы вы рекомендуете при написании быстрых, эффективных для памяти и элегантных программ в Windows?

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

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

4b9b3361

Ответ 1

Библиотека шаблонов Windows ориентирована на то, что вы хотите сделать. Это легкая, основанная на шаблонах С++-оболочка для Win32 API. С его помощью вам не придется испытывать боль от прямого кодирования Win32, но это не добавляет много накладных расходов, таких как MFC.

Ответ 2

uTorrent написан на С++ и использует старомодный Win32 API. Google Chrome также написан таким образом, так почему бы не загрузить исходный код и не узнать из своего кода?

Ответ 3

Если вы хотите оптимизировать минимально возможный объем памяти, и вы не против перепрыгивать через кучу обручей, которые были разработаны CLR.NET, чтобы позаботиться о вас, а затем написав прямое приложение Win32API и подключившись к GDI + - это путь. Petzold является окончательной ссылкой.

Действительно, это как бы безумное поручение, так как среда выполнения .NET будет загружена в память ОС независимо от того, использует оно ваше приложение или нет, поэтому вы можете также ссылаться на нее.

Ответ 4

Демо-сцена - это группа людей, которые проводят свое свободное время, пытаясь сделать впечатляющие и очень маленькие исполняемые файлы, которые обычно что-то делают в 3d Музыка. Часто вся демонстрация (код, музыка, 3D-данные) компилируется в один исполняемый файл, который сжимается до 64k или имеет впечатляюще небольшой размер для контента.

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

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

Ответ 5

Общие сведения. Для небольших исполняемых файлов #define WIN32_LEAN_AND_MEAN и VC_EXTRALEAN (при условии VS). Не компилируйте с помощью отладочных символов (вы, вероятно, знали это). Используйте меньше библиотек и станьте пользователем, чтобы связать только те части библиотек, которые вам нужны (VC-компоновщик хорош в этом, но не прикасайтесь к optlink, если вы можете ему помочь).

Разделите заголовки переходов: перейдите в http://www.paehl.de/cms/oldtools и найдите "ReduceEXE" (прямая ссылка для скачивания: http://www.paehl.de/reduce.zip).

Запустите исполняемый пакет: http://upx.sourceforge.net/... Он использует больше памяти во время выполнения и начинает немного медленнее, но файл МНОГО меньше.

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

Если вы хотите перейти на hardcore (и не заботитесь обо всех преимуществах разработки программного обеспечения), попробуйте использовать меньшее количество классов, предпочитая вместо них типы POS без виртуальных функций. Википедия предполагает, что 6-13% времени выполнения программы тратится на виртуальные вызовы. Кроме того, сами vtables занимают память (LITTLE), а значение size_t памяти в начале каждого экземпляра класса (с виртуальной функцией) выделяется для указателя vtable. IOW, "чистый C" может оказаться немного быстрее (хотя, если вы обнаружите, что эмулируете классы с указателями функций, вернитесь к С++).

Ответ 6

Старый "LIBCTiny" трюк все еще работает. С современными выпусками VС++ вам может потребоваться включить несколько функций.

Еще один хороший трюк - коллекцию функций lstr* в Kernel32. Это уже в памяти, поэтому эти функции могут быть более компактным выбором.

Ответ 7

Notepad ++ это также очень быстрая, высоко оптимизированная и очень полезная программа os, которая может вдохновить вас на вдохновение. Эта философия похожа на философию uTorrent. Он использует старый добрый Win32 api, который все равно должен быть максимально быстрым в Windows.

Если вы хотите стать действительно артистичным, демонстрационная сцена - идеальное место для идти. Хотя их код не всегда открыт.