Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Маленькая программка с ShowMessage, например


Автор: Elfet 31.10.2004, 17:58
Как сделать маленькую программку, чтоб она например просто вызывала ShowMessage ??
У меня получилось >150кб :(

Автор: S.A.P. 31.10.2004, 18:49
Elfet а на чем ты пишешь?
Если на VC++ то меняй параметры компиляции с Debug на Release.

Автор: Elfet 31.10.2004, 19:14
на Microsoft Visual Studio .NET :)
Добавлено @ 19:15
Цитата(Perchilla @ 31.10.2004, 19:49)

Если на VC++ то меняй параметры компиляции с Debug на Release.

Это как? :)
Добавлено @ 19:16
а, всё, вроде нашел :qstn
Добавлено @ 19:16
108 кб :)

Автор: S.A.P. 31.10.2004, 19:18
Пиши на NET или MFC. Будет меньше :) .

Автор: bel_nikita 1.11.2004, 01:01
А про оптимизацию забыли :( Еще нужно в Optimization выставить Minimize Size. :rtfm

Автор: Elfet 1.11.2004, 14:11
Цитата(bel_nikita @ 1.11.2004, 02:01)

А про оптимизацию забыли  Еще нужно в Optimization выставить Minimize Size. 


что то не помогло =) скоко было - стоко осталось ,или может я что-то сделал =)

Автор: S.A.P. 1.11.2004, 14:23
Elfet проследи, чтобы оптимизация устанавливалась для твоего режима компиляции.

Автор: bel_nikita 1.11.2004, 16:46
а можно на прямую вставить
Цитата

#pragma optimize("s", on)
...
наш код
...
#pragma optimize("s", off)
:cool

Автор: xDriver 1.11.2004, 18:07
Маленкую программу на Builder`е сделать не получится это БОРМАНД.


Автор: Goldberg 1.11.2004, 18:13
Цитата(xDriver @ 1.11.2004, 18:07)
Маленкую программу на Builder`е сделать не получится это БОРМАНД.

Он вроде как Microsoft Visual Studio .NET использует.;-)

Автор: Elfet 1.11.2004, 20:08
Цитата(Goldberg @ 1.11.2004, 19:13)

Он вроде как Microsoft Visual Studio .NET использует.


угу, но и на Builder`е тоже пытался это сделать =)




уже дошел до 68кб :)

Автор: xDriver 1.11.2004, 22:58
Блин на VC 6.0 вот так:

#pragma comment(linker,"/MERGE:.rdata=.text")
#pragma comment(linker,"/FILEALIGN:512 /SECTION:.text,EWRX /IGNORE:4078")
#pragma comment(linker,"/ENTRY:WinMain")


int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int)
{

MessageBox(0,"Ну очень маленькая","Маленькая прожка:)",0);
return 0;
}


размер 2048k :p

Автор: S.A.P. 1.11.2004, 23:00
Цитата(xDriver @ 1.11.2004, 22:58)

2048k

И что? Это маленький размер считается?
Добавлено @ 23:04
xDriver че то не компилица
Цитата
fatal error C1010: unexpected end of file while looking for precompiled header directive


Автор: bel_nikita 1.11.2004, 23:47
Perchilla
Цитата
xDriver че то не компилица

вставь: #include <windows.h> :)

Цитата
размер 2048k

2048 байт - опечатался человек

Автор: S.A.P. 1.11.2004, 23:51
Цитата(bel_nikita @ 1.11.2004, 23:47)

вставь: #include <windows.h> 

да нет :) стоит у меня <windows.h> :)

Автор: bel_nikita 1.11.2004, 23:59
Perchilla
Цитата
да нет  стоит у меня <windows.h>
и не компилится?


Цитата
fatal error C1010: unexpected end of file while looking for precompiled header directive

а, ну понятно:
тогда зайди в Project/Settings/Precompiled Headers и выстать Not Using Precompiled Headers :cool

Автор: S.A.P. 2.11.2004, 00:07
Вау!!! У меня вобще один килобайт вышел :yasno

Автор: S.A.P. 2.11.2004, 00:34
Блин, обалдеть, у меня на асме 4 килобайта выходило. А еще меньше сделать можно?

Автор: Step 2.11.2004, 11:50
в первую очередь надо выставить динамическо подключение библиотек

второе для релиз версии отключить внедрение дебаг инфы..

третье оптимизация по размеру


любая простейшая программа на МФЦ в релиз версии очень редко выходит за размер 30 кб и выходит она только из за рессурсов

на асме подобная программа не должна выходить за 600 байт....., и не может быть меньше 512 байт....




Автор: xDriver 2.11.2004, 13:07
Да ивиняюсь забыл :D #include <windows.h>
И компилить только Release проект !!! Debug работать не будет !!

Ну и конечно опечатался размер 2048 байт ! ;-) ;-)
респект Perchilla

Автор: S.A.P. 2.11.2004, 13:09
Цитата(xDriver @ 2.11.2004, 13:07)

респект Perchilla

Это что ты типа посмеялся надо мной? :)

Автор: Атос 6.11.2004, 10:45
1024 байта в Release версии:

Код

#pragma comment(linker,"/MERGE:.rdata=.text")
#pragma comment(linker,"/ENTRY:WinMain")

#include "windows.h"

int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int)
{
MessageBox(0,"Ну очень маленькая","Маленькая прожка",0);
return 0;
}

Автор: Атос 6.11.2004, 11:46
для сравнения - тот же код на ассемблере:

Код

; выдем из проги по ret 0, не по стандартному ExitProcess
; чтобы сэкономить 64 байта на вызове ExitProcess
; и 48 байтов на имортировании ExitProcess

;includelib kernel32.lib
; extrn __imp__ExitProcess@4:dword
;ExitProcess equ __imp__ExitProcess@4

includelib user32.lib
extrn __imp__MessageBoxA@16:dword
MessageBox equ __imp__MessageBoxA@16

.386
.model flat

.const
msg_title db "Маленькая прожка", 0
msg_text db "Ну очень маленькая", 0

.code
_start:
push 0
push offset msg_title
push offset msg_text
push 0
call MessageBox

;push 0                  ; если ExitProcess() вместо ret 0, то размер 736 байт
;call ExitProcess
ret 0
end _start


сборка:
Код

ml /c /coff /Cp /Zp1 msgbx.asm
link msgbx.obj /subsystem:windows /align:16 /merge:.rdata=.text


...занимает 624 байта.... так что асм форева! smile

Автор: knave 12.11.2004, 14:51
Смешно читать. Вы не забывате что елсилинкуете со статическими библиями то в вашу программу вставляеться весь код который обрабатывает ваше окно, тот же MessageBox.
Это окно такое же полноценное коно как и любое другое, несмотря на то что размеры мальнькие. Если хочеш узнать реальный размер твоей программы то потри obj файл от твоего исходника.Лиюо сделай компиляцию с ДЛЛ. ТОгда программа бдет весить примерно 30 килобайт. Но за ней рпидется всервемя таскать все необходимые ДЛЛ.

Так что хоть MessageBox хоть просто окно,весить будет одинаково - та как не надо забывать про код класса окна. Ведь все события что есть у него, кто то должен обрабатывать.

Автор: S.A.P. 14.11.2004, 19:21
knave не понял тебя, какие еще DLL нужны, если программа ничего не использует кроме стандартных функций из kernel, user и gdi ?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)