计划用尽可能小的内存占用(在Linux上)
我要寻找一个程序,做以下的事情:计划用尽可能小的内存占用(在Linux上)
- 将无限期地等待,又名当
./prog &
- 称为本身并不退出有在运行时尽可能最小的内存占用量,例如通过
pmap
工具,程序和[stack]
字段测量。
这个问题不纯粹是学术,我正在研究一个memory scanner,我需要一个最小的例子来处理。
我能想出(纯C)最小的是:
#include <unistd.h>
int main(int argc, char **argv)
{
pause();
return 0;
}
,但我敢肯定,这可以与一些装配/编译/ C奥术魔法相形见绌,因为这一个吃超过180 KB程序+堆栈。
试试这个程序:
#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。
这肯定回答我的问题,如上所述,谢谢,但现在对我的实际目的来说太多了,因为我没有可扫描的区域。有没有简单的方法来分配一点点?如有需要,我可以提出另一个问题。 – 12345ieee
@ 12345ieee您是否愿意下定决心?由于动态链接程序使用的内存和C运行时的初始化,每个使用动态链接和libc的程序都将至少具有与给出的一样多的内存使用量。静态链接可能会减少一点(但不是很多)。如果你没有编写程序,它将使用你在程序中使用的尽可能多的内存,这在我提供的程序中几乎没有。制作一个消耗比这个更多内存但程序少于C程序的程序有点困难。 – fuz
@ 12345ieee程序是否可以接受,每秒只增加一个计数器(存储在RAM中)? – fuz
实际上,你想要链接器魔法,用一个自定义链接脚本尽可能地缩小所有的内存空间。 –
'#include int main(int argc,char ** argv) { return pause(); }'*会稍微*小一点;-) –
wildplasser
@wildplasser:我真的不认为源大小会影响运行时大小。 – 12345ieee