XSLT存档  

不及格的程序员-八神

 查看分类:  ASP.NET XML/XSLT JavaScripT   我的MSN空间Blog
posts - 72,  comments - 1152,  trackbacks - 0
作者:不及格的程序员-八神


函数是写程序中被广泛使用的通用模块,目前流行的主要语言或平台一般都支持的可变数目参数,可实现方式大不一样。
就是说当函数被调用时,参数的个数是不固定的。
 

C/C++的实现

该平台实现可变数目参数的函数,最复杂,它靠调用者将参数压栈传递给它,同时在调用完成函数时,调用者负责清理栈,将栈空间恢复,维持栈平衡。
经典的C语言函数printf就支持可变数目的参数,因为它约定了由调用者清理栈。这种约定很重要,不然调用者清理栈,函数本身也清理栈,栈的结构就会被破坏.

因为只有调用者知道要传给它多少个参数.如果由函数本身清理,就会出现问题,它根本不知道外层都有哪些栈空间传递过来.

x86平台下有几种约定方式,c调用协定(支持) 标准调用协定 快速调用协定 this调用协定 clr调用协定 x64调用协定(支持)
 

.NET 平台

以C#为例,它也可以通过在函数中使用params关键字实现可变数目参数(其实是假的,其实即时编译器会成类似数组的参数传过进去),它使用的是快速调用协定,通过cx与dx寄存器传递参数首地址。

由clr运行时的即时编译器来处理计算函数参数的个数与地址。
总之它是假的,并不是真正用像"c调用协定"的方式使用栈空间操作。

WEB平台的javascript

更简单js解析器会在函数范围内维护一个对象(类似数组) ,它包含了全部函数的使用的参数...

不过现在比较时兴将javascript编译成本地码的js引擎,我猜它们的实现方式也应该类似以上两种形式,每家都有各自的高招.

 


南来地,北往的,上班的,下岗的,走过路过不要错过!

======================个性签名=====================

之前认为Apple 的iOS 设计的要比 Android 稳定,我错了吗?

下载的许多客户端程序/游戏程序,经常会Crash,是程序写的不好(内存泄漏?刚启动也会吗?)还是iOS本身的不稳定!!!

如果在Android手机中可以简单联接到ddms,就可以查看系统log,很容易看到程序为什么出错,在iPhone中如何得知呢?试试Organizer吧,分析一下Device logs,也许有用.

我的开发工具

对于博客园里的网友,不敢称为叫"程序员"的人,你们攻击性太强,看来你们是不会想到我的用意的.园子里有不少人都非常喜欢Jeffrey,是因为它的第一版 框架设计 CLR via C#.
可是从第一版到现在的第三版,没有看到真正底层的东西,内容仅仅是比MSDN文档更丰富一些,可能是我的要求太高了吧.
也就是因为它很多时候会接触到微软开发人员,会经常聊聊某些问题而已,而它又将这些问题反应到书中.也许它就像一个小记者.
它的年龄大我们不多,我的孩子与它小儿子一般大,如果我能向它那样出入微软与它们开发人员长时间交流,不仅仅会牛成它这样.....
可是微软的开发人员不会扔太多时间在它这儿的.所以它会整天追着这个,赶它那个..屁颠个不停吧...
而它的另一版被称为好书的 Windows核心编程,更是没有什么深度可言,仅仅是将windows提供的api,以及内核功能再重申了一遍.
这些书对晋及编程知识是有些贡献的,再说一遍我不是在匾低谁,说说想法而已.

posted on 2010-03-18 10:14 不及格的程序员-八神 阅读(1151) 评论(1) 编辑 收藏
发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1688705 R/2UQT8OjB0=