首页
论坛
课程
招聘
[求助]用汇编写的程序如何减少内存占用?
2005-12-2 20:47 5154

[求助]用汇编写的程序如何减少内存占用?

2005-12-2 20:47
5154
写了一个最简单的win32汇编程序,没有创建任何界面,也没有做任何事情。但是查看进程发现占用了1M内存。有没有技巧减少它的内存占用呢?(例如调整masm的编译参数?)

汇编代码如下:

.586
.model flat,stdcall
option casemap:none

   include windows.inc
   include user32.inc
   include kernel32.inc
   
   includelib user32.lib
   includelib kernel32.lib

WinMain proto :DWORD,:DWORD,:DWORD,:DWORD

.data?
   hInstance HINSTANCE ?

.code

; ---------------------------------------------------------------------------

start:
        invoke GetModuleHandle, NULL
        mov    hInstance,eax
       
        invoke WinMain, hInstance,NULL,NULL, SW_SHOWDEFAULT
        invoke ExitProcess,eax

WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
        LOCAL msg:MSG
       
        .WHILE TRUE
                invoke GetMessage, ADDR msg,NULL,0,0
                .BREAK .IF (!eax)
                invoke TranslateMessage, ADDR msg
                invoke DispatchMessage, ADDR msg
        .ENDW
       
        mov     eax,msg.wParam
        ret
WinMain endp

【看雪培训】《Adroid高级研修班》2022年夏季班招生中!

收藏
点赞0
打赏
分享
最新回复 (8)
雪    币: 201
活跃值: 活跃值 (34)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
dwing 活跃值 1 2005-12-3 00:52
2
0
真正的程序和数据空间占用不大,
但默认的栈大小是1M,你可以修改一下默认的栈大小.
雪    币: 203
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hyzhang 活跃值 2005-12-9 17:16
3
0
小声的问一下,在asm中怎样设置栈大小。
雪    币: 201
活跃值: 活跃值 (34)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
dwing 活跃值 1 2005-12-9 20:00
4
0
最初由 hyzhang 发布
小声的问一下,在asm中怎样设置栈大小。


VC中修改工程属性比较方便.
不过MS的工具应该差不多.
如果使用MASM32,link的时候注意一下它的某个参数.
雪    币: 203
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hyzhang 活跃值 2005-12-9 20:09
5
0
最初由 dwing 发布


VC中修改工程属性比较方便.
不过MS的工具应该差不多.
如果使用MASM32,link的时候注意一下它的某个参数.


上面程序在link的时候加了/stack:100,100参数,执行还要占1096左右内存,象系统的smss.exe只占几百K内存,不知怎么做到的。
雪    币: 200
活跃值: 活跃值 (12)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
henryouly 活跃值 8 2005-12-16 01:02
6
0
是啊,我也加了参数,还是接近1M的内存消耗
雪    币: 201
活跃值: 活跃值 (34)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
dwing 活跃值 1 2005-12-16 11:54
7
0
最初由 hyzhang 发布
上面程序在link的时候加了/stack:100,100参数,执行还要占1096左右内存,象系统的smss.exe只占几百K内存,不知怎么做到的。


smss.exe只加载了smss.exe和ntdll.dll两个模块,当然内存占用很少了.
只要有窗口,就会占用大量内存空间.
加载kernel32.dll和user32.dll一样会占用许多空间.
因为kernel32.dll和user32.dll是win32子系统层,
而ntdll.dll是NT中间层,在win32子系统层之下.
雪    币: 204
活跃值: 活跃值 (14)
能力值: ( LV12,RANK:490 )
在线值:
发帖
回帖
粉丝
FlyToTheSpace 活跃值 12 2005-12-27 20:07
8
0
调用,
SetProcessWorkingSetSize(GetCurrentProcess(),-1,-1);
程序就会减少内存点用量。
如果是图行界面的话建意用在程序里面加一个SetTimer,
每秒钟调用一下这个函数,就可以了。。
雪    币: 1120
活跃值: 活跃值 (262)
能力值: ( LV13,RANK:810 )
在线值:
发帖
回帖
粉丝
Anskya 活跃值 20 2005-12-31 13:39
9
0
To 楼上:
这个函数只能作表面工作吧...实际减少了吗?没注意到
游客
登录 | 注册 方可回帖
返回