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

有没有可能用C写一个什么都不做甚至不占用内存的程序?,c,C,这是一个在采访中提出的棘手的C问题:编写一个什么都不做的程序,甚至不占用内存 可以这样做吗?不,不可能。代码和堆栈必须放在某个地方,并且几乎总是放在内存中 忽略这一点,编写一个直接退出的应用程序肯定很容易。所有程序都使用内存。运行程序时,操作系统将为程序设置地址空间,将其参数复制到进程空间,为其提供进程ID和线程,为其提供一些I/O文件描述符,即使你的程序立即终止,你仍然会消耗掉这些内存和CPU时间。你的回答应该是询问你为什么要做这样的事情。这将显示出超越问题的思考空间。从表面上看,这个问题似乎

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


可以这样做吗?

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


忽略这一点,编写一个直接退出的应用程序肯定很容易。

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

你的回答应该是询问你为什么要做这样的事情。这将显示出超越问题的思考空间。

从表面上看,这个问题似乎有一个简单的答案:“不,这不可能做到。”@templatetypedef给出了一些理由


但问题的关键可能是看你如何解决它。您可能会因为询问“什么类型的内存”或观察@templatetypedef提出的一些观点而得到“分数”。或者显示@Mihran Hovsepyan给出的empty main()方法,然后解释即使在这种极小的情况下也会涉及一些内存。

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

下面是我的无资源使用计划:)



还要注意的是。严格地说,在操作系统加载并使其运行之前,程序实际上不会消耗任何资源。当这种情况发生时,我们称之为进程。

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

因此,在某种意义上,您可以编写一个程序来避免堆管理之类的事情。但操作系统仍会将其读入内存


请参阅:

正确答案是它是特定于实现的。一个实现可以支持空程序,
execve
(或等效)机制可以在遇到空程序时执行与
\u Exit(0)
等价的操作,但实际上它并不支持空程序。

确切定义了占用内存的含义?这是否意味着该程序甚至无法为调用堆栈和/或堆分配任何内存,或者在运行时根本无法使用任何内存?@mr_eclair:如果是面试问题,请包括面试标签。避免使用该雇主。他们根本不知道自己在问什么。@mr_eclair:创建空的*.c文件并编译。:)根据我的经验,这样的问题在面试中几乎没有用处。若面试官想要建立一个知识基线,他最好问“有可能做到吗?”。棘手的问题通常会被误解,可能会淘汰优秀的候选人。如果他想让候选人在给出明确答案之前提问,他最好进行对话,而不是申请笔试。如果他的讲师和我的一样。。。他们会因为他是个聪明的混蛋而让他失望的。很高兴我离开了大学(很高兴我离开了学习的那一边…聚会和整天睡觉都很愉快;)。我要为此干杯。。。zzzz!!:-)事实上,我认为在这种情况下,问你为什么要这么做并不是一个好问题。这是一个人工的或假设的问题,探索一些重要的概念——如果试图产生空程序的思想教给我们一些东西,那么空程序本身就不需要有价值。有时候,旅程本身就是一种回报。dj——作为更广泛讨论的一部分,我认为应该询问原因,否则这是一种盲目的调查。在现实世界中,这类似于被要求非法穿越马路,避开白色汽车。如果你不提出问题,你就不会意识到问题中的白色汽车是警车,“其他”白色汽车在请求中没有任何意义(可怕的例子,但你希望看到我的观点,或者不知道!!):-)@戈兹-讲师?这是求职面试用的。如果一家公司因为应聘者试图从如此糟糕的面试问题中获得有用的东西而失败,那么该公司是否应该拥有他们最终得到的那些毫无技能的员工(因为每个有能力的人都会乐于去其他地方)。“几乎总是这样”?除了内存,代码和堆栈还能去哪里?@Martin:有些机器有“代码内存”和“堆栈内存”。我猜它仍然是记忆。但它不是malloc意义上的记忆,因为它来自一个完全不同的池。