Размер консольного приложения
include только <iostream>. Чего то, мне кажется, многовато. Нельзя как-то уменьшить размер? Может я еще чего в свойствах проекта неправильно выставил? Пустой проект, с одним return получается такого же размера.
include только <iostream>. Чего то, мне кажется, многовато. Нельзя как-то уменьшить размер? Может я еще чего в свойствах проекта неправильно выставил? Пустой проект, с одним return получается такого же размера.
А зачем /MT ?
[QUOTE=MSDN]/MT
Causes your application to use the multithread, static version of the run-time library. Defines _MT and causes the compiler to place the library name LIBCMT.lib into the .obj file so that the linker will use LIBCMT.lib to resolve external symbols.[/QUOTE]
Судя по описанию, компилятор с этим ключом добавляет библиотеку LIBCMT.lib, вот и распухает размер.
Попробовал скомпилить одну из своих консольных программок: без этого ключа 28,5 кб, с /MT вышло 220 кб.
Ключ /MT статически подключает библиотеку С++. Чтобы уменьшить размер, можно подключить библиотеку динамически с ключом /MD.
Ключ /MT статически подключает библиотеку С++. Чтобы уменьшить размер, можно подключить библиотеку динамически с ключом /MD.
Это понятно. Только динамически можно подключить библиотеку, если она есть на компьютере. Я экзешник скомпилированный с /MD пробовал запускать на виртуальной машине с чистой WinXP SP3. Не запускается, выдает ошибку что приложение не может быть запущено, поскольку не настроено должным образом и т.д. Посмотрел зависимости- две библиотеки
MSVCR90 и MSVCP90. Поэтому и /Mt.
На чем пишут экзешники, размер которых 2Кб...10Кб, с математикой floating point и все работает без внешних dll? На ассемблере?
Блин..Извиняйте, я только вторую неделю C++ мучаю. И visul studio. Не очень понял о чем вы. Нельзя ли слегка разжевать или ссылку на где это разжевывается? Особенно про сегменты.
В целом, да. Поскольку, по языку - все более или менее придерживаются стандарта, с местечковыми расширениями. А со средой - тут поле для творчества большое.
Попробуй скомпилить код типа:
int main()
{
HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
WriteFile(hStdout, "Hello!", 7, NULL, NULL);
float f = 0.0;
f += 10.0;
return 0;
}
Наверняка я не очень грамотно написал, но не важно. Главное, что должно получиться автономное консольное приложение с резмером 2Кб...10Кб. И "плавающая запятая" присутствует :)
Таким же образом можно много чего натворить и без всякого ассемблера. Но при этом теряем в переносимости кода, он становится ошибкоопасным и многословным.
Да, Win32 API. А std::cout что использует и к чему обращается в Windows?