Board logo

标题: DOS下程序的内存占用要怎么看啊? [打印本页]

作者: yysn     时间: 2010-11-15 14:49    标题: DOS下程序的内存占用要怎么看啊?

mem命令可以查看正在运行的程序的占用内存大小。
所以,本人写了一个小程序,想测试一下看看,然后发现了一个问题。
先贴上代码:

#include <stdio.h>
#include <stdlib.h>
#include <alloc.h>

int main(int argc,char *argv[])
{
        FILE *fp;
        char buf[64];
       
        fp = fopen("coreleft.txt", "a+b");
        if(NULL != fp)
        {
                fprintf(fp, "coreleft = %lu byte\n", (unsigned long)coreleft());
                fflush(fp);
                fclose(fp);
        }
       
        if(argc>1)
        {
                sprintf(buf, "mem /M %s > mem-m.txt", argv[1]);
                system(buf);
        }
       
        system("mem /C > mem-c.txt");
        system("mem /D > mem-d.txt");
               
        return 0;
}

然后在DOS命令行下运行 memtest memtest ,此时会生成3个文件。
很诧异的是,就这么一个小程序,居然占用内存达到了72K

Modules using memory below 1Mb:

  Name           Total       =   Conventional   +   Upper Memory
  --------  ----------------   ----------------   ----------------
  SYSTEM      29,296   (29K)     29,232   (29K)         64    (0K)
  SETVER         784    (1K)        784    (1K)          0    (0K)
  HIMEM          768    (1K)        768    (1K)          0    (0K)
  EMM386       3,392    (3K)      3,392    (3K)          0    (0K)
  COMMAND      2,656    (3K)      2,656    (3K)          0    (0K)
  MEMTEST        128    (0K)        128    (0K)          0    (0K)
  MEMTEST     73,680   (72K)     73,680   (72K)          0    (0K)
  ETHDRV      53,120   (52K)     53,120   (52K)          0    (0K)
  COMMAND      2,816    (3K)      2,816    (3K)          0    (0K)
  PROTMAN        112    (0K)          0    (0K)        112    (0K)
  DC21X4      42,432   (41K)          0    (0K)     42,432   (41K)
  DIS_PKT      3,504    (3K)          0    (0K)      3,504    (3K)
  ETHDRV      22,112   (22K)          0    (0K)     22,112   (22K)
  FREE       503,856  (492K)    488,768  (477K)     15,088   (15K)

不知道怎么回事?

代码查看附件
附件 1: 检测内存.rar (2010-11-15 14:49, 10.44 K,下载次数: 7)

作者: netwinxp     时间: 2010-11-26 07:56
因为该程序调用了新的command.com进程来执行mem命令.建议用INT 21H AH=4BH来直接执行mem.exe