首页
社区
课程
招聘
[求助]用汇编写的程序如何减少内存占用?
发表于: 2005-12-2 20:47 7346

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

2005-12-2 20:47
7346
写了一个最简单的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

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

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


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


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


上面程序在link的时候加了/stack:100,100参数,执行还要占1096左右内存,象系统的smss.exe只占几百K内存,不知怎么做到的。
2005-12-9 20:09
0
雪    币: 270
活跃值: (312)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
6
是啊,我也加了参数,还是接近1M的内存消耗
2005-12-16 01:02
0
雪    币: 217
活跃值: (99)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
最初由 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子系统层之下.
2005-12-16 11:54
0
雪    币: 333
活跃值: (369)
能力值: ( LV12,RANK:490 )
在线值:
发帖
回帖
粉丝
8
调用,
SetProcessWorkingSetSize(GetCurrentProcess(),-1,-1);
程序就会减少内存点用量。
如果是图行界面的话建意用在程序里面加一个SetTimer,
每秒钟调用一下这个函数,就可以了。。
2005-12-27 20:07
0
雪    币: 1272
活跃值: (746)
能力值: ( LV13,RANK:810 )
在线值:
发帖
回帖
粉丝
9
To 楼上:
这个函数只能作表面工作吧...实际减少了吗?没注意到
2005-12-31 13:39
0
游客
登录 | 注册 方可回帖
返回
//