这是一个棘手的C问题,在采访中提到:编写一个什么都不做的程序,甚至不占用记忆。
是否可以这样做?
答案 0 :(得分:35)
所有程序都使用内存。当您运行程序时,操作系统将为程序设置地址空间,将其参数复制到其进程空间,为其提供进程ID和线程,为I / O提供一些文件描述符等。即使您的程序立即终止你仍然耗尽这个内存和CPU时间。
答案 1 :(得分:4)
不可能。代码和堆栈必须在某处,并且几乎总是在内存中。
忽略这一点,只需编写一个直接退出的应用程序就可以了。
答案 2 :(得分:2)
你的回答应该是询问'为什么'你想做这样的事情。这将显示出超越问题思考的自由。
答案 3 :(得分:1)
从表面上看,问题似乎有一个简单的答案:“不,不能做到。” @templatetypedef有一些原因。
但也许问题的关键在于看看你如何解决它。你可能会因为询问“什么样的记忆”或观察@templatetypedef所做的一些观点而得到“标记”。或者用于显示@Mihran Hovsepyan给出的空main()方法,然后解释即使在这种极小的情况下也会涉及一些内存。
答案 4 :(得分:1)
虽然启动程序时操作系统会分配一些内存,但大多数人并不知道main()不是真正的程序入口点。 mainCRTStartup,至少在Windows控制台应用程序上。如果您创建一个具有实际入口点的程序,您将避免堆初始化例程,命令参数解析,全局变量初始化等。
因此,从某种意义上说,你可以创建一个避免堆管理和东西的程序。但操作系统仍会将其读入内存。
答案 5 :(得分:0)
空程序是一个程序,不是吗?
以下是我的无资源使用程序:)
另请注意。严格来说,在OS加载并使其运行之前,程序确实不消耗任何资源。当发生这种情况时,我们将其称为过程。
答案 6 :(得分:0)
正确的答案是它是特定于实现的。一个实现可以支持空程序,execve
(或等效)机制在遇到一个时可以执行等效的_Exit(0)
,但实际上它不会。{/ p>