@
dorentus “小小”的用户空间程序,首先说的是存储所有权和默认优先占用运行时资源的地位。不论相对内核还是用户,它就应该保持卑微。做了显然违反用户需求的事,而用户没有误操作,那就该出来挨骂。
因为没有资格僭越用户的需求,任何用户空间程序在没有明确得到授权或请求时,在多任务系统上就应该保持保守占用资源。这是本分。
你的截图中的 2G 多的占用相对 OP 的例子看似不过分,但考虑 xcode 干的事,已经开始离谱了。
xcode 调用的真正干活的必要开发工具(编译器和链接器之类),乃至一些分析工具,都是单独开进程占用资源的,而要编译链接占 2G 多的规模程序的项目已经不算小了。对这种体积的项目来说,相比之下,devenv 分析完同时开几十个文件稳定占用也不过几百 M (这还包括没通过 clangd 之类另外的进程外包出去的活);所以即便只是个开始,也至少说明 xcode 很拉胯。
并且,这不支持你的观点。你说“不用拿来做什么”,言下就是在你这 xcode 用得还不够多。OP 遇到的状况反而还比你完善一点;但是,体验毫无疑问地糟糕。
所谓“内存万一不够用怎么办”这就不可能只是操作系统需要考虑的事情,因为操作系统没有道德义务也没有技术能力对犯傻没下限的应用负责。可见的未来,操作系统不可能智能到真正区分出一个应用到底是确实需要分配资源还是有很大嫌疑占着茅坑不拉屎,因为这涉及对任务内容的主观价值判断,而瞎判断 OOM 乱杀任务的问题上面已经说了;所以哪个任务占用过多哪个任务欠杀,必须依赖用户的决断。
(若有不服,你可以先搞出一个带有强人工智能保证不会比现在的人类用户误判更多的操作系统实现来试着让和你观点不同的用户闭嘴。)
操作系统能做的也就是提供简便的接口放权给用户(顺便,这也是 Android 和 iOS 做的比几乎所有桌面系统更烂的地方),反过来用户同样有义务了解这个局限性,清楚不被信任的任务可能被干掉。
一般意义上,操作系统的用户包含应用和最终用户,无论是应用占用资源的策略还是最终用户选择是否启动并容忍任务对资源的占用,都是人(应用开发者或者最终用户)在根据任务自身的是否有理由继续存在的主观判断直接或者间接地作出决定,而不是机器的思考。不管是开发者还是最终用户,放弃行使这种权利理应后果自负;你所谓的“太闲”,不管出发点是什么(基于对机器能力的蜜汁自信,或者对人类用户的权利的蔑视),完全是颠倒黑白,可以说非蠢即坏,并不冤枉。
顺便,历史上,乔布斯是一贯蔑视消费产品的最终用户对和自己不同的产品方面理解的能力的,最好用户都是傻子。但 xcode 作为一个用户不能太傻的开发工具,苹果还没好意思把逻辑一起贯彻上。
你是想进一步教苹果做产品么?那么第一步,你看来就不该承认内存泄露的 bug ,而是说,这是 xcode 的伟光正开发者决定的 feature 的一部分,至于具体是什么你们最终用户不配管,爱用用不用润。