打印

编译器对作为局部变量的数组是怎么管理的?放在堆栈中?

[复制链接]
楼主: xlander
手机看帖
扫描二维码
随时随地手机跟帖
21
flanker| | 2008-1-13 20:27 | 只看该作者 回帖奖励 |倒序浏览

唉,这么好的帖子没人理会

使用特权

评论回复
22
db10| | 2008-1-14 00:18 | 只看该作者

函数一次调用可能4入个参数不多,但是多层调用时就不止了

使用特权

评论回复
23
flanker| | 2008-1-16 23:45 | 只看该作者

多层调用,每次都可以用4个通用寄存器

当然,无休止的递归,还是会把栈写暴的……

使用特权

评论回复
24
sz_kd| | 2008-1-17 00:03 | 只看该作者

我来顶

使用特权

评论回复
25
有梦就去追| | 2008-1-17 23:04 | 只看该作者

看的稀里糊涂的

再来消化。。。

使用特权

评论回复
26
flanker| | 2008-1-18 22:04 | 只看该作者

一般来说,操作系统任务栈写暴的后果

一般的系统里面,栈的生长方向和堆的生长方向是相反的。假设某系统栈的生长方向是往下,大小为64KB。
如果有人在某个任务调用的函数里面,使用了超大栈内存,导致栈写爆,就会写坏后面一个任务的栈。当操作系统调度到后面的任务时,由于栈写爆,会将错误的值恢复入PC指针中,导致系统异常,并且无法使用调用栈推导的方法定位问题。
使用PC-lint工具,加入选项
-a**** 
可以查出使用过大的栈内存。其中,****是限制大小,超过此大小的栈内存,这个家伙就会告警了。

使用特权

评论回复
27
lpf336| | 2008-1-18 22:17 | 只看该作者

PC-lint工具是个什么东东?

使用特权

评论回复
28
db10| | 2008-1-19 09:45 | 只看该作者

PC-lint

 是代码静态分析工具,在业内真正用和完全执行的开发人员和公司比较少。huawei是我知道和体会过的一家,他们是真正使用和执行的。
 使用时,可以将这个工具嵌入安装在做嵌入式开发最常用的sourceinsight里,vc里也可以。。。  因为sourceinsight没有静态检查程序语法的错误功能。安装后就可以起到静态检查程序语法的错误作用。当然这个工具比一般的编译器有点内似。但是又有区别,不编译生成文件。可能比一般的编译器排错功能强一点,但是要记住也是检查静态的,动态的一些错误,基本也是无能为力了。

使用特权

评论回复
29
flanker| | 2008-1-19 22:43 | 只看该作者

PC-Lint可以做增强,检测某些很深入的隐患

在PC-Lint的配置里面,开启某些开关,再加入一些语义约束条件以后,内存泄漏、潜在踩内存隐患都可以查出来。
《编程精粹》里面提倡用这个东西检查代码,当然要根据实际来关掉一些告警输出,否则一大堆告警会极大挫伤程序员的信心:)
当然,这玩意归根结底是个工具,不能代替人。(要不公司干嘛每月花那么多钱花钱雇人干活啊)想让自己的代码真正牢不可破,还得靠自己脑子里面绷紧弦,平时多下些功夫,写复杂逻辑的代码前,最好找张纸画流程图;在使用复杂数据结构时,也最好在纸上画图理清楚自己的思维,写代码时边写边注释。
咱们都是人不是神,因此都会犯错误,关键是让自己减少犯错误的可能。如果说这个是目的,那么,PC-Lint也好,代码review也好,画流程图也好,都是为达成目的使用的手段。



使用特权

评论回复
30
flanker| | 2008-1-19 22:49 | 只看该作者

再说正题

大二的时候,跟师兄学会了玩8051。师兄水平高超但眼界有限,只会在WAVE下面用汇编写代码,于是我也只用汇编。师兄自己想出来的一套汇编调用子过程时传参数的约定,和C51编译器使用寄存器/栈传参的规则有异曲同工之妙。
我确定那位大侠没有玩过C51,因为后来他老人家看到我用Keil开发程序的时候惊讶的表情证明了这一切。
现在我玩过的处理器有很多种,涉及4种不同的体系结构,可是对汇编和指令集的理解,比起从前对51的理解的透彻程度,简直霄壤之别。也许是心态变得浮躁,或是迫于工作的压力,也可能是因为51简单。总之,想想从前用汇编写程序的激情的日子,还是很有意思的...

使用特权

评论回复
31
Swd21ic| | 2008-1-26 22:16 | 只看该作者

flanker真是码字高手.

对底层的理解很透彻阿..

希望做几年也能想你那样~..把一些东西做精

使用特权

评论回复
32
ruiwei0201| | 2008-1-28 17:32 | 只看该作者

都是高手

现在才发现要学的东西太多了!感觉头晕.

使用特权

评论回复
33
flanker| | 2008-2-16 22:57 | 只看该作者

哪里,不算高手

本人在公司的技术等级才3级...
和5级的专家说起话来,他们都像开导小学生一样教训我。
嵌入式底层这条路,很辛苦,很寂寞,但是,只要心中有梦想,我们永远不贫穷……

使用特权

评论回复
34
db10| | 2008-2-16 23:34 | 只看该作者

。。。

3级也算可以了,5级那本来是稀有动物啊。
 ls俺知道你在哪个公司了。估计那是我以前呆过的公司。你不是在4com,呵呵。

使用特权

评论回复
35
flanker| | 2008-2-17 18:58 | 只看该作者

呵呵

何必研究我在那个公司呢……

使用特权

评论回复
36
db10| | 2008-2-17 22:32 | 只看该作者

LS

 没关系吧,说说而已,更何况我没有说公司名字。

使用特权

评论回复
37
flanker| | 2008-2-19 22:19 | 只看该作者

呵呵,我现在呆的公司还没有人上吊过

可能是因为人还不是很多。
等人像现在10倍这么多了,估计上吊/跳楼的都该有了。

使用特权

评论回复
38
xlander|  楼主 | 2008-2-22 22:13 | 只看该作者

非常经典的帖子,虽然有很多东西看不懂,慢慢体会吧

使用特权

评论回复
39
flanker| | 2008-2-24 21:35 | 只看该作者

哪里,哪里

皮毛中的皮毛

使用特权

评论回复
40
wxx116zh| | 2010-7-6 13:21 | 只看该作者
学习了。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则