C/C++程序员应该如何应对OOM

作者&投稿:钞采 (若有异议请与网页底部的电邮联系)
如何成为程序员~

1、找一个自己最喜欢的方向,选择你第一步想要充实的开发语言。例如Android工程师需要学习Android开发语言,需要掌握Java基础。
2、自学、或者参加职业培训进行学习。(第一步非常重要,扎实的基础是以后职业发展的祭奠。例如在磨砺营教育每一个知识点老师都会讲三遍。)
3、去开发一个真实的项目。最好是能最终上线的。只有做过真实上线项目的才是企业所需要的,毕竟企业需要将自己的产品上线。(磨砺营所教的项目完全是老师亲自开发的上线项目。)
4、准备好你的作品去面试吧,多次碰壁不要怕。

我觉得优秀的程序员,不仅优秀在代码上,更重要在思维等方面。
我认为一个优秀程序员是谨慎的,在有需求与任务时,会不断的澄清需求与任务,并且多次确认想要的结果,而非闷头听着或者看着需求与任务列表。
我认为一个优秀程序员的思维是清晰的,在写代码时,他的脑海是有一系列详细步骤的,即知道他在做什么,而且写下的每一步他都能清楚的知道在表达什么。
我认为一个优秀程序员的思维是缜密细致的,在出问题后,他会详细的先研究问题出在哪里,思考缘由,而非闷头瞎使用printf大法,然后去撞大运,头痛医头,脚疼医脚,因为这样解开了Bug其实连自己都心虚。而优秀的程序员即使解开了Bug,他也会扩展问题,并且思考是否其它部分是否也有类似的问题,只是还未体现,而且他也会详细反思获得的经验。
我认为一个优秀程序员的编码习惯是良好的,他的代码读起来是赏心悦目的,若遇到难理解的实现点时,他也会写下清晰的注释来帮助后来人理解,因为他知道代码不仅是让计算机执行,更是需要让别人也理解的,因为项目开发是团队合作,而非单打独斗。
与优秀程序员的合作是愉快的,而非觉得难处。

你好,1,new失败的时候抛异常,外面进行catch和拒绝
2,程序判断malloc/new的返回值,为NULL就拒绝请求

这两个看似完美的方案都有巨大的缺陷。

1,new失败抛异常会导致C++不能正确的释放资源。除非C++程序员精心的设计每个类,并且精心的进行每次catch,这实际上是不可能的;而且常常会导致各种复杂性和不稳定。
2,程序判断malloc/new的返回值,这个相对靠谱一点,但实际上也会把程序变得复杂,而且没法控制类库里面malloc/new失败之后会做什么。而且无法解决操作系统的oom_killer带来的问题。
3,无法处理lazy allocation和memory overcommit。这是最致命的。

正确的解决方案是什么?

1,事先规划内存,像memcached、squid那样,规定自己最多用多少内存。如果要拒绝请求,在malloc之前就拒绝,永远不要碰到oom这种事情。因为oom不仅会给自己带来麻烦,还会通过oom_killer给操作系统和其他进程带去麻烦。
2,信任oom_killer,相信内存不足的时候系统会给你腾出你该有的内存。(内存不足的时候malloc/new是会阻塞的等oom_killer把活儿干完的。所以,如果malloc/new失败了,那就是连oom_killer都找不出可杀的进程了)
3,不要信任oom_killer,是的,这和上面是矛盾的。oom_killer拥有非常高的优先级,常常会引起swap,会造成各种意料之外的副作用。你最好永远都不要遇到它。
4,在linux下要信任glibc的malloc,网上很多文章介绍说malloc碎片什么的,都是炒冷饭。如果你不明白原理和最新的进展,那么就信任malloc。实在内存分配多,就搞个mem pool。
5,做好监控,和自动重启。由于oom_killer等意外的存在,监控和自动重启是必须的。另外,coredump的客观存在也要求监控和自动重启。


保靖县15385628267: 如何成为一名优秀的C++程序员 -
钊梁五积: 首先具有一定的理论基础,需要多看书,例如《c++ primer》《effective c++》等书最好看一下.c++比较底层,所以学习c++也需要学习操作系统、网络编程、计算机组成原理等知识.另外,算法、数据结构等也是必不可少的. 撇开c++这个语言,成为一个优秀的程序员都是必须通过大量的练习的,必须多写代码.

保靖县15385628267: 一个优秀的c++程序员应该具备的素质! -
钊梁五积: 1.把C++当成一门新的语言学习(和C没啥关系!真的.);nbsp;2.看《Thinkingnbsp;Innbsp;C++》,不要看《C++变成死相》;nbsp;3.看《Thenbsp;C++nbsp;Programmingnbsp;Language》和《Insidenbsp;Thenbsp;C++nbsp;Objectnbsp;Model...

保靖县15385628267: 一个优秀的c++程序员应该具备的素质! -
钊梁五积: 1.把C++当成一门新的语言学习(和C没啥关系!真的.); 2.看《Thinking In C++》,不要看《C++变成死相》; 3.看《The C++ Programming Language》和《Inside The C++ Object M...

保靖县15385628267: C++程序员应该具备什么技能,才能达到企业要求 -
钊梁五积: 1. 具备很强的学习能力 2. 思路敏捷,逻辑思维清晰. 3. 熟悉C++语言,了解基本的C++库.

保靖县15385628267: 成为c/c++程序员的学习方向 -
钊梁五积: 说一下个人的看法,无所谓对错:1、直接学C++就可以了,完成没必要先学C,另外MFC只是作为桌面编程的一个具体形式而已,如果没有C++基础,学不来.所以,大一的同学,安心学好你的C++好了,这个基础打好了,其它的都好办.2、坦白说,个人完全不认同学C++要先学C3、对于一个C/C++程序员来说,了解一定的操作系统的知识是有必要的.而linux相对来说,更经典一些.另外,一般服务器都以linux作为操作系统,windows一般作为个人电脑操作系统更多一些.4、这个,对于算法、数据结构,基础等,个人还是觉得C++合适一些.

保靖县15385628267: 程序员如何学好C++的50条忠告荟萃 -
钊梁五积: 41.就让C++语言的各种平台和开发环境去激烈的竞争吧,我们要以学习C++语言本身为主; 42.当你写C++程序写到一半却发现自己用的方法很拙劣时,请不要马上停手;请尽快将余下的部分粗略的完成以保证这个设计的完整性,然后分析自...

保靖县15385628267: 如何成为一个C++高级程序员 -
钊梁五积: C++这门语言从诞生到今天已经经历了将近30个年头.不可否认,它的学习难度都比其它语言较高.而它的学习难度,主要来自于它的复杂性.现在C++的使用范围比以前已经少了很多,java、C#、python等语言在很多方面已经可以代替C++....

保靖县15385628267: 如何成为一名C++程序员 -
钊梁五积: 入门就是要初步对编程的思想有个了解,并且能编程解决一些小问题.入门一定要选好书,难度如果太低了会造成对读者的误导,以为编程就是这么回事;也不能太高深,免的打击读者的信心.既然编程的入门要求是编一些小程序解决小问题,...

保靖县15385628267: C/C++的windows程序员需要掌握哪些知识啊? -
钊梁五积: 1.先学好C/C++基本知识,看一些关于C++的编程名著书籍2.选择一个图形界面 VC/GTK/WxWidgets/QT, 建议选择跨平台的UI库3.选择一个领域,游戏编程/人工智能/图像处理/操作系统....

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网