Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Bad Lamer
Зарегистрирован: 23.09.2004 Сообщения: 61
|
Добавлено: Пн Июн 27 2005 18:53 Заголовок сообщения: Величина процесса в памяти... |
|
|
Может кто-нибудь замечал такое, поделитесь знаниями:
написАл я программу под Windows, использовал только функции WinAPI32 (никаких компонентов и т.д.), реализовал на ассемблере и на Delphi. Исполняемый файл на ассемблере получился 2.5 КБ (асм. хатчевский masm32, на TASM-e 4КБ), на Delphi - 15КБ. Зато в списке процессов использование памяти программы на асме - 1460 КБ, а на Delphi - 680 КБ. Почему так?
В ассемблерной программе подключал kernel32.dll и user32.dll
в делфийской - модуль windows.dcu |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
Bad Lamer
Зарегистрирован: 23.09.2004 Сообщения: 61
|
Добавлено: Вт Июн 28 2005 00:06 Заголовок сообщения: |
|
|
может вопрос не корректно сформулировал...
вобщем интересно, почему величина процесса проги на асме больше величины процесса проги на делфи?.. |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
mad_alexx
Зарегистрирован: 14.01.2005 Сообщения: 154 Откуда: Иркутск
|
Добавлено: Вт Июн 28 2005 04:50 Заголовок сообщения: |
|
|
Может быть Delphi оптимизирует код, а ассемблер оставляет как есть. |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
kolobok0
Зарегистрирован: 22.04.2005 Сообщения: 253 Откуда: Мсква
|
Добавлено: Вт Июн 28 2005 12:09 Заголовок сообщения: память.. |
|
|
Думаю, если в Вашей программе используеться динамически выделяемая память, либо глубокие рекурсии - вполне может быть. Так трудно сказать.
Попробуйте выкидывать функционал, до тех пор - пока вещи не подпадут под "нормальную" логику сравнения (азм меньше делфи). Тогда будет понятно где собака порылась.
с уважением
(круглый) _________________ (круглый) |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
Bad Lamer
Зарегистрирован: 23.09.2004 Сообщения: 61
|
Добавлено: Вт Июн 28 2005 21:44 Заголовок сообщения: |
|
|
Вот код на асме:
.386
.model flat
includelib c:\masm32\lib\user32.lib
includelib c:\masm32\lib\kernel32.lib
extrn __imp__GetMessageA@16:dword
extrn __imp__TranslateMessage@4:dword
extrn __imp__DispatchMessageA@4:dword
extrn __imp__ExitProcess@4:dword
.data?
hmod dd ?
MSG struc
hwnd dd ?
message dd ?
lParam dd ?
wParam dd ?
time dd ?
pt dd ?
MSG ends
msg MSG < ?, ?, ?, ?, ?, ? >
.code
_start:
mov edi, offset msg
msg_loop:
push 0
push 0
push 0
push edi
call __imp__GetMessageA@16
test eax, eax
jz exit_msg_loop
push edi
call __imp__TranslateMessage@4
push edi
call __imp__DispatchMessageA@4
jmp short msg_loop
exit_msg_loop:
push 0
call __imp__ExitProcess@4
end _start
Вот на делфи:
program prog1;
uses
Windows;
var
Msg:TMsg;
begin
while GetMessage(Msg, 0, 0, 0) do
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end.
Это, конечно не полный код моей программы, но этого вполне хватает чтобы посмотреть разницу... все остальное писАл идентично, используя только функции API.
Если нужно: компилил так:
masm32: ml /c /coff /Cp; link /subsystem:windows
делфийскую компилил в Delphi 7
![Confused](images/smiles/icon_confused.gif) |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
|