john_he 发表于 2007-9-16 14:20:28

引用第9楼lw于2007-09-16 12:31发表的:
RETURN部分没有压栈操作,只是根据栈内的第一个数据进行返回(跳转到XX地址),另外返回值也是进入之前就协定好了(VC通常是EBP的下一个参数+4),那么如果真的没有任何对返回值有操作,那么就是原来进入的时候的返回值,在VC编译器DEBUG情况通常会得到类似于0XCCCCCCCC的错误值可以立即发生问题(除非纯粹看看……),返回结构通常会被转化,本质上就是返回一个VOID了,结构另外方式存放——

[硬件特性] 偶则不懂什么意思?
类似于VB这类会默认把数值设置为0,有时候是不错,但是会培养不初始化的坏习惯,特别是间隔比较长时候修复的时候会很难抓虫子,个人理解以上。。。

呃,返回值是通过EAX传递的,不是栈,栈上只有返回地址。返回值只是在返回前设置EAX的值,没有就不设。

M所指的硬件特性是指编译出来的机器码的行为,我觉得叫“平台特性”会好点。例如访问了不能访问的内存程序就崩溃,从返回void的函数那里取返回值(通过指针间接调用等方法)会得到一个未定义的值(其实就是函数退出时EAX的值)。

我觉得理论上Java也是可能会有编译器捕捉不了的错误,这些错误最终会通过Java的VM反映出来。

rednaxela 发表于 2007-9-22 11:13:24

引用第10楼john_he于2007-09-16 14:20发表的:
我觉得理论上Java也是可能会有编译器捕捉不了的错误,这些错误最终会通过Java的VM反映出来。
编译时无法捕获的错误就是运行时错误...一般会造成RuntimeException的抛出,那些都是unchecked exception来的.

话说Java在方法返回时确实需要把返回值压到栈上.这是因为JVM的指令集是stack-based instruction set,而不是类似x86体系的register-based instruction set.不过压栈的行为并不是return做的就是了.
页: 1 [2]
查看完整版本: [java]返回问题