有可能用C编写一个什么都不做的程序 - 甚至不占用内存?

时间:2011-01-06 08:53:39

标签: c

这是一个棘手的C问题,在采访中提到:编写一个什么都不做的程序,甚至不占用记忆。

是否可以这样做?

7 个答案:

答案 0 :(得分:35)

所有程序都使用内存。当您运行程序时,操作系统将为程序设置地址空间,将其参数复制到其进程空间,为其提供进程ID和线程,为I / O提供一些文件描述符等。即使您的程序立即终止你仍然耗尽这个内存和CPU时间。

答案 1 :(得分:4)

不可能。代码和堆栈必须在某处,并且几乎总是在内存中。

忽略这一点,只需编写一个直接退出的应用程序就可以了。

答案 2 :(得分:2)

你的回答应该是询问'为什么'你想做这样的事情。这将显示出超越问题思考的自由。

答案 3 :(得分:1)

从表面上看,问题似乎有一个简单的答案:“不,不能做到。” @templatetypedef有一些原因。

但也许问题的关键在于看看你如何解决它。你可能会因为询问“什么样的记忆”或观察@templatetypedef所做的一些观点而得到“标记”。或者用于显示@Mihran Hovsepyan给出的空main()方法,然后解释即使在这种极小的情况下也会涉及一些内存。

答案 4 :(得分:1)

虽然启动程序时操作系统会分配一些内存,但大多数人并不知道main()不是真正的程序入口点。 mainCRTStartup,至少在Windows控制台应用程序上。如果您创建一个具有实际入口点的程序,您将避免堆初始化例程,命令参数解析,全局变量初始化等。

因此,从某种意义上说,你可以创建一个避免堆管理和东西的程序。但操作系统仍会将其读入内存。

请参阅:http://www.catch22.net/tuts/minexe

答案 5 :(得分:0)

空程序是一个程序,不是吗?

以下是我的无资源使用程序:)


另请注意。严格来说,在OS加载并使其运行之前,程序确实不消耗任何资源。当发生这种情况时,我们将其称为过程。

答案 6 :(得分:0)

正确的答案是它是特定于实现的。一个实现可以支持空程序,execve(或等效)机制在遇到一个时可以执行等效的_Exit(0),但实际上它不会。{/ p>