32位系统中多于4个字节的函数返回值是怎么存储的?


今天在网上学习 朴素Linux . 了解了函数的返回值一般放在 eax 寄存器中,也就是一般返回值不超过4个字节。

如果我要返回一个多于4于四个字节的结果,比如一个超过 4 字节的结构体。结果怎么存呢,还是用eax吗?

感谢 Theo 的回答。 看了他推荐的文章,我发现自己要问的是 cdecl 这种调用约定中,如何返回超大的对象或结构体

现在我自己来解答一下:整数值或内存地址,是通过EAX寄存器返回的。对于较小的结构体或对象,可以通过EAX:EDX寄存器对返回。对于超大的对象或结构体,caller在调用函数之前会分配出内存空间,然后把这个空间地址作为第一个参数隐式地传给函数。被调用的函数callee把结果写进这片内存空间,然后pop空间地址,然后返回。

c Linux C++

狗悦工口大魔王 11 years, 2 months ago

你给的条件太宽泛了,怎么存储跟体系结构、编译器、操作系统以及调用约定的关系相当大,不能一概而论,因此不能给你一个简单的回答,不过首先要把这篇看完入门: http://en.wikipedia.org/wiki/X86_calling_conventions

剩下的部分就是查阅各个编译器、操作系统等手册了。

MIO求舔足 answered 11 years, 2 months ago

Your Answer