博文
[置顶] C++内存管理(2009-04-03 14:05:00)
摘要:又把林锐的高质量程序设计指南看了一遍, 感觉收获还是挺大的,下面把内存管理一章中的主要注意环节提炼出来,和大家分析一下,这大部分都是原书中摘下来的,如果一明白可以去找这个本书看看,网上也有得下,找不到的我这也有,我也可以传给大家.
内存分配方式有三种:
1、从静态存储区域分配。内存在程序编译的时候就已经分配好了,这些内存在程序的整个运行期间都存在。例如:全局变量,static变量等。
2、在堆栈上分配。在函数执行期间,函数局部变量的存储单元都创建在堆栈上,函数结束时这些存储单元自动释放。
3、从堆(heap)或自由存储空间上分配,亦称动态内在分配。程序在运行期间自己分配和释放内存,常用new和delete。
注意:
1、函数的return语句,不要返回指向“栈内存”的指针或者引用,因为该内存在函数结束时被自动释放;
2、使用free()和delete释放了内存后,没有将指针设置成NULL,产生“野指针”;
3、我们申请内存后,应该立即检查指针值是否为NULL或者进行异常处理,以防止使用值为NULL的指针,我们可以在函数的入口处用assert(p!=NULL)来进行检查以避免输入非法参数或者用if语句来判断。
4、不要忘记初始化指针、数组和动态内存,防止将未初始化的内存作为右值使用;
5、释放内存之后,立即将指针设置为NULL,防止产生“野指针”。
6、如果函数参数是一个指针,不要指望用该指针去申请动态内存。如果非得用指针参数去申请内存,那么应该改用“指向指针的指针”或者“指针的引用”;同时用函数返回值来传递动态内存;
7、不等于NULL的指针不一定是有效指针,所以一定不要忘记初始化指针变量为NULL或者有效地址。
8、指针消亡了,并不表示它的所指向的内存会被自动释放;内存被释放了,并不表示指针会消亡或者成为NULL。
9、malloc()的原型:void *malloc(size_t size);对应的void free(void *memblock)
......
定义和声明(2009-03-23 10:30:00)
摘要:定义和声明的区别:
1、声明是在向编译器介绍名字,它告诉编译器:这个函数或这个变量在某外可找到,它是什么模样,不分配存储空间,而定义则在这里建立变量或函数,它为名字分配存储空间;
2、可以多次声明,而定义只能有一次;
3、当然定义也可以是声明。如定义:int x;在这之前如果编译器没有发现标识符x,编译器则把这一标识符看成是声明并立即为它分配存储空间。......
嵌入式学习之路(2009-03-23 00:31:00)
摘要:本文转自网上,作者:周立功
对于今天很多的年轻人来说,一味注重技术至上的观念刻骨铭心,其实很多时候努力并非一定有回报。
在这篇文章里,我不打算将创业的艰辛与喜悦重新回忆一遍,我确实不想去误导大家,因为我所处的年代是一个物质缺乏的年代,成功相对来说要容易得多。每个人的成长经历都有其个性化的东西,每个人的成功创业经验虽然有一些可以遵循的普遍规律,但一般来说都很难复制,成功需要不断地创新。
对于今天很多的年轻人来说,一味注重技术至上的观念刻骨铭心,其实很多时候努力并非一定有回报。事实上,有不少出类拔萃的人才往往做出来的产品就是卖不掉,因为设计者压根儿就不了解用户的需求和心理以及产品功能的恰当定义,而总想在同事及其老板面前卖弄自己的技术和产品功能。其实有很多思维性的东西恰恰是很多人所忽视的,因为从一开始的出发点就错了,怎么可能取得辉煌的成绩呢?所以有时拥有卓越的技术并不一定代表人生的成功,很多企业就是死在一些自命不凡的“卓越人才”手中。
它山之石可以攻玉,减少“阶段0”的开发
有所“创造”确实是人人期待的,令人瞩目的发明虽然激动人心却谈何容易,人们时常将盖茨没有任何爆炸性的发明作为茶余饭后的笑料,我们不妨从另外一个角度去探索微软的成功奥妙从而为我们所用。
确实不假,盖茨的DOS源代码是从帕特森手上“买”来的。这些年来,我收集了世界各地中英文版有关微软的专著来比较研究,大家仅仅注意到盖茨为建立整个行业架构标准的远见,并叹服盖茨深得市场运作经验的精髓,我认为这些研究成果都是后来者研究微软成功经验,是“牵强附会”不可复制的理论总结。
当初微软公司还仅仅是一家很稚嫩的公司,可以说生存下去是盖茨作为老板唯一的使命。事实上,正当盖茨决定动手来写IBM所要的OS时,原计划在一年左右完成,但IBM公司只给了他几个月的时间。尽管帕特森的QDOS并不完善错误百出,但为了履行对IBM的承诺,盖茨购买了QDOS改贴标签后卖给了IBM公司。盖茨对此心知肚明,因为他知道如果用一年的时间来做OS的开发,他将失去与巨人IBM的合作机会,那是一种浪费。付一小部分的技术费用没有关系,只要能获得Know-how,获得更高的利润就好了。通过支付权利金引入技术,然后以模仿的方式学习他人的技术,再改造成符合IBM需要即可。
“买”――只要有现成的就不需要自己开发,这......
ARM2103(2009-03-23 00:21:00)
摘要:今天连续工作了八个小时,最终那板小小的板子还发大部分焊接完成了,还有二个贴片的芯片没有焊,计划明天完成任务,今天实在太累了,眼睛都看花了,今天的蚊子可是爽呆了,把我咬得不行了,我都没有工夫理它. 记得上次焊板子还是大三的时候的事了,到现在一直没有动过手,记得那时候拿起电烙铁手还在颤抖,后来由于没有参加电子设计大赛,从此就荒废了,而一起开始学的同学老八嘎,则通过电子设计大赛练就了一身好本领,当然这和自身的努力是分不开的,付出是有回报的,他得到了全国电子设计大赛的一等奖,但可惜的是,学校把他这样的好苗子强行留到了学校,从而失去了去外校读研的机会,而我由于当然的好运气,来到了这里来读研,唉,现在才知道出来也不是想像中的那么好,那时多么想换一个环境来学习,人都是喜新厌旧的.因此我高高兴兴的来到这里,现在倒是失望有点彻底.总体说来,还是他们在本校的好,天时,地利,人和就更不用说了,现在可是后悔莫及啊!!!还是说说板子吧,想到这里就不爽,几二个星期买一下买了二板相对而言超级便宜的板子,但现在想想还是觉得有点不值,因为现在毕竟是一把年纪了,没有这么多的精力来学ARM和FPGA,同时他们都是并口下载的,虽说板子是便宜,但如果还要买其它的东西如下载线的话就不划算了,毕竟现在也得由爹妈要钱,怎么好意思开口.FPGA就先放一边吧,以后有时间玩一下也就无所谓了. 总结一下今天的经历:开始有点不也下手,动了手之后才发现也不是想像中的那样难,当然差距是会有的.不过还好要求不高,只要它能运行就行了,美观的问题以后再说吧.1、方法很重要,记得以前焊接时,方法完全错了,以至焊出来的板子难看不用说,虚焊的现象更要人命。2、电烙铁保持合适的温度和保持光亮非常重要;3,装备很重要,还是用公家的东西爽,现在的东西都要自己买,且只能买便宜的。我那数字万用表很垃圾,还是个新的,测个电阻都不精确,电压就更不用说,还是便宜不是好货啊;4、最重要的莫过于坚持,坚持就是胜利。板子现在还没有测试,还不知道有没有问题,希望不要出现什么问题啊!今天做了一件很SB的事,在焊接的过程中把那JP引线插口,竟然都把他们插反了,难怪操作起来一点都不方便。不过老天还算是帮忙,这样的错误对实验来说,没有什么影响。唉,也不知道有自己在做什么,先这样......
重温C++(2009-03-22 13:34:00)
摘要: 今天决定在这里开博了,希望能把自己在学习中的体会遇到的困难一一记录下来.什么时候开始学习都是不晚的,下面我就开始我的重温C++之旅.......
