我正在寻找一个程序,做以下事情:
无限期等待,aka在使用./prog &调用时不会自行退出。
在运行时具有最小的内存占用,例如,由pmap工具、程序和[stack]字段测量。
这个问题不是纯学术性的,我正在研究一个memory scanner的问题,我需要一个最小的例子。
我能想到的最小的(纯c)是:

#include <unistd.h>

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

但我相信这可能与一些汇编/编译器/c的神秘魔法相形见绌,因为这一个吃掉了超过180kb的程序+堆栈。

最佳答案

尝试此程序:

#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(大写)的文件中,然后按如下方式进行组装和链接:
cc -c pause.S
ld -o pause pause.o

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

关于c - 程序以最小的内存占用(在Linux上),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45654245/

10-11 15:23