C++ Win32 без зависимости от библиотеки времени выполнения C, но с malloc, бесплатно atd

Я хочу уменьшить размер своих приложений win32, запрограммированных в MS Visual Studio C++, и я также хочу иметь гарантированную совместимость со всеми версиями Windows (XP и выше без распространяемого пакета Visual C++). Я использовал параметры /MT и /NODEFAULTLIB, чтобы уменьшить размер файла и избавиться от библиотеки C Run-Time. Но я потерял доступ к таким функциям, как malloc, free, strcat, strstr и т. д. Как лучше всего обойти эту проблему?

Я думаю об этих альтернативах:

  1. Используйте LoadLibrary("msvcrt.dll") и GetProcAddress() для динамической загрузки указателя на эти функции из стандартной библиотеки Windows.
  2. Запрограммируйте эту функцию самостоятельно, например, замените malloc на VirtualAlloc(), free на VirtualFree() и т. д.

Или это какое-то другое решение моей проблемы? Спасибо


person Juraj Kušnier    schedule 18.08.2012    source источник
comment
Всегда сначала делайте сложную часть. Реализовать std::bad_alloc   -  person Hans Passant    schedule 18.08.2012


Ответы (1)


Я, вероятно, никогда не пойму, почему люди хотят это делать (ПК не совсем встроенные платформы со всеми их проблемами размера), но в основном есть три варианта:

  • не используйте какие-либо стандартные функции, кроме тех, которые компилятор предлагает как встроенные/встроенные функции
  • сделать свою собственную библиотеку
  • используйте стороннюю библиотеку, такую ​​как http://www.codeproject.com/Articles/15156/Tiny-C-Runtime-Library
person Christian Stieber    schedule 18.08.2012
comment
Спасибо, Tiny-C-Runtime-Library — это именно то, что я искал. - person Juraj Kušnier; 18.08.2012