计划用尽可能小的内存占用(在Linux上)

问题描述:

我要寻找一个程序,做以下的事情:计划用尽可能小的内存占用(在Linux上)

  1. 将无限期地等待,又名当./prog &
  2. 称为本身并不退出有在运行时尽可能最小的内存占用量,例如通过pmap工具,程序和[stack]字段测量。

这个问题不纯粹是学术,我正在研究一个memory scanner,我需要一个最小的例子来处理。

我能想出(纯C)最小的是:

#include <unistd.h> 

int main(int argc, char **argv) 
{ 
    pause(); 
    return 0; 
} 

,但我敢肯定,这可以与一些装配/编译/ C奥术魔法相形见绌,因为​​这一个吃超过180 KB程序+堆栈。

+2

实际上,你想要链接器魔法,用一个自定义链接脚本尽可能地缩小所有的内存空间。 –

+0

'#include int main(int argc,char ** argv) { return pause(); }'*会稍微*小一点;-) – wildplasser

+0

@wildplasser:我真的不认为源大小会影响运行时大小。 – 12345ieee

试试这个程序:

#include <sys/syscall.h> 

    .text 
    .globl _start 
    .type _start,@function 
_start: 
    mov $SYS_pause,%eax 
    syscall # pause(); 
    ud2  # crash if pause() returns (should not happen) 

保存在名为pause.S(大写S)文件,组装和这样的链接:

cc -c pause.S 
ld -o pause pause.o 

这说明我的机器上消耗的内存一页。这个页面可能是一个堆栈空间页面,因为文本段是从二进制映射的,因此不会占用RAM。

+0

这肯定回答我的问题,如上所述,谢谢,但现在对我的实际目的来说太多了,因为我没有可扫描的区域。有没有简单的方法来分配一点点?如有需要,我可以提出另一个问题。 – 12345ieee

+1

@ 12345ieee您是否愿意下定决心?由于动态链接程序使用的内存和C运行时的初始化,每个使用动态链接和libc的程序都将至少具有与给出的一样多的内存使用量。静态链接可能会减少一点(但不是很多)。如果你没有编写程序,它将使用你在程序中使用的尽可能多的内存,这在我提供的程序中几乎没有。制作一个消耗比这个更多内存但程序少于C程序的程序有点困难。 – fuz

+0

@ 12345ieee程序是否可以接受,每秒只增加一个计数器(存储在RAM中)? – fuz