具有最小内存占用的程序(在Linux上)

123*_*eee 1 c linux assembly x86-64

我正在寻找一个执行以下操作的程序:

  1. 无限期地等待,也就是说在被召唤时不会自行退出 ./prog &
  2. 运行时具有尽可能小的内存占用量,例如pmap工具,程序和[stack]字段.

这个问题不仅仅是学术性的,我正在研究内存扫描仪,我需要一个最小的例子来处理.

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

#include <unistd.h>

int main(int argc, char **argv)
{
    pause();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是我确信这可以与一些程序集/编译器/ C奥术魔法相形见绌,因为​​这个程序+堆栈超过180 KB.

fuz*_*fuz 6

试试这个程序:

#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)
Run Code Online (Sandbox Code Playgroud)

保存在一个名为pause.S(大写S)的文件中,然后像这样汇编和链接:

cc -c pause.S
ld -o pause pause.o
Run Code Online (Sandbox Code Playgroud)

这表示在我的机器上消耗了一页内存.此页面可能是一页堆栈空间,因为文本段是从二进制文件映射的,因此不占用RAM.