DELPHI内存详解(6)-函数返回值
2011-09-16 12:01
169 查看
DELPHI内存详解(6)-函数返回值
2010-06-04 16:35
2010-06-04 16:35
Delphi函数在返回值的处理上,对于32简单数据类型(不包括浮点数类型),是使用eax返回的,如Integer等;对于64位简单数据类型,是使用edx:eax返回的,如int64类型,而对于结构体返回值来说,长度在32位及以下是通过eax返回的,32位以上返回有点区别,不是“32位以上用寄存器返回指针”,而是在调用前传递了一个默认指针参数。如下面例子的function IncX: TTest;函数,在TTest类型长度大于32位时,实际上等同于于procedure IncX(var v: TTest)或者procedure IncX(v: ^TTest)。下面例子非常有意思: 下面的代码中,定义了一个记录类型,定义了2个同名的方法(同不同名无所谓),v1和v2的x字段都初始化为10,分别调用2个方法后。提问: 1、v1.x与v2.x的值分别为多少?(要求不要在机上测试) 2、假如从记录定义中去掉y字段,v1.x与v2.x的值又分别为多少?(要求不要在机上测试) type TTest = record x: Integer; y: Integer; end; procedure IncX(var v: TTest); overload; begin Inc(v.x); end; function IncX: TTest; overload; begin Inc(Result.x); end; var v1, v2: TTest; begin v1.x := 10; v2.x := 10; v1 := IncX; IncX(v2); end; 试题的结果是:两个都是11 DELPHI的函数返回值一定要初始化,如果没有初始化,则返回是一个随机值(没有初始化返回值,DELPHI编译器会告警)。 |
相关文章推荐
- Delphi中复制带有String的记录结构时不能使用Move之类的内存操作函数
- 程序员之---C语言细节22(函数返回指针注意事项<悬空指针>、查看进程能够分配的内存大小)
- Delphi - 反转内存的函数
- 共享内存映射之mmap()函数详解
- c中函数返回局部变量申请的内存的问题
- c++中函数中变量内存分配以及返回指针、引用类型的思考
- Getmemory函数详解--内存操作的理解
- Delphi调用外部程序函数:WinExec() 和ShellExecute详解
- c++函数在传入对象参数和返回对象时候的内存调用情况
- Delphi 的内存操作函数(3): 给结构体指针分配内存
- c++第十二章 -(动态管理内存、动态数组和函数返回动态内存)
- Delphi中的钩子函数HOOK详解
- C++入门(15):从函数或方法返回内存:工厂函数
- 终于懂了:Delphi的函数名不是地址,取地址必须遵守Object Pascal的语法(Delphi和C的类比:指针、字符串、函数指针、内存分配等)good
- C++引用:经典例题之引用作为函数的返回值,结合函数栈帧详解
- system V 共享内存函数详解
- Delphi 的内存操作函数1-2: 给数组指针分配内存
- 浅谈返回函数内部new分配的内存的引用
- 不能返回函数内部new分配的内存的引用
- (转)Cocos2dx中响应Android的Back(返回)与Menu(小房子)事件 && Cocos2dx自动释放粒子内存函数