Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Размер консольного приложения

48K
22 августа 2009 года
andrey32
19 / / 22.08.2009
Написал консольную программку, строк 150. C++, native. Cкомпилил. С ключом /Mt, чтобы запускалась на других компах. Размер получился 142Кб.
include только <iostream>. Чего то, мне кажется, многовато. Нельзя как-то уменьшить размер? Может я еще чего в свойствах проекта неправильно выставил? Пустой проект, с одним return получается такого же размера.
297
22 августа 2009 года
koodeer
1.2K / / 02.05.2009
Цитата: andrey32
Написал консольную программку, строк 150. C++, native. Cкомпилил. С ключом /Mt, чтобы запускалась на других компах. Размер получился 142Кб.
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 кб.

45K
22 августа 2009 года
Яски
15 / / 17.07.2009
Компилировать нужно со включенными оптимизациями, от этого размер очень сильно зависит.
Ключ /MT статически подключает библиотеку С++. Чтобы уменьшить размер, можно подключить библиотеку динамически с ключом /MD.
48K
22 августа 2009 года
andrey32
19 / / 22.08.2009
Цитата: Яски
Компилировать нужно со включенными оптимизациями, от этого размер очень сильно зависит.
Ключ /MT статически подключает библиотеку С++. Чтобы уменьшить размер, можно подключить библиотеку динамически с ключом /MD.


Это понятно. Только динамически можно подключить библиотеку, если она есть на компьютере. Я экзешник скомпилированный с /MD пробовал запускать на виртуальной машине с чистой WinXP SP3. Не запускается, выдает ошибку что приложение не может быть запущено, поскольку не настроено должным образом и т.д. Посмотрел зависимости- две библиотеки
MSVCR90 и MSVCP90. Поэтому и /Mt.
На чем пишут экзешники, размер которых 2Кб...10Кб, с математикой floating point и все работает без внешних dll? На ассемблере?

9
22 августа 2009 года
Lerkin
3.0K / / 25.03.2003
Не в ключах компилятора дело - но в ключах для линкера. Так же, смотрите размеры всех сегментов. В некоторых случаях, можно объединять.
48K
22 августа 2009 года
andrey32
19 / / 22.08.2009
Цитата: Lerkin
Не в ключах компилятора дело - но в ключах для линкера. Так же, смотрите размеры всех сегментов. В некоторых случаях, можно объединять.


Блин..Извиняйте, я только вторую неделю C++ мучаю. И visul studio. Не очень понял о чем вы. Нельзя ли слегка разжевать или ссылку на где это разжевывается? Особенно про сегменты.

9
22 августа 2009 года
Lerkin
3.0K / / 25.03.2003
Цитата: andrey32
Блин..Извиняйте, я только вторую неделю C++ мучаю. И visul studio. Не очень понял о чем вы. Нельзя ли слегка разжевать или ссылку на где это разжевывается? Особенно про сегменты.


Начните с этого в целях ознакомления с опытом. Про сегменты и прочее - гугль знает.

48K
22 августа 2009 года
andrey32
19 / / 22.08.2009
Lerkin, thanks. Поизучаю. Я так понял, в программировании больше заморочек с конкретикой-средами разработки, компиляторами чем с сами языком.
9
22 августа 2009 года
Lerkin
3.0K / / 25.03.2003
Цитата: andrey32
Я так понял, в программировании больше заморочек с конкретикой-средами разработки, компиляторами чем с сами языком.


В целом, да. Поскольку, по языку - все более или менее придерживаются стандарта, с местечковыми расширениями. А со средой - тут поле для творчества большое.

87
22 августа 2009 года
Kogrom
2.7K / / 02.02.2008
Цитата: andrey32
На чем пишут экзешники, размер которых 2Кб...10Кб, с математикой floating point и все работает без внешних dll? На ассемблере?



Попробуй скомпилить код типа:

 
Код:
#include <windows.h>

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Кб. И "плавающая запятая" присутствует :)

Таким же образом можно много чего натворить и без всякого ассемблера. Но при этом теряем в переносимости кода, он становится ошибкоопасным и многословным.
48K
22 августа 2009 года
andrey32
19 / / 22.08.2009
Kogrom, это , как я понимаю, WinAPI. И вся программа-обращение к функциям системы.
87
22 августа 2009 года
Kogrom
2.7K / / 02.02.2008
Цитата: andrey32
Kogrom, это , как я понимаю, WinAPI. И вся программа-обращение к функциям системы.



Да, Win32 API. А std::cout что использует и к чему обращается в Windows?

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог