我知道用C编码,函数的返回值使用%eax寄存器返回给调用者.
使用c ++,也可以返回结构而不仅仅是'Primitive'类型,所以当一个函数返回一个结构时,存储的返回值在哪里(堆栈,堆等)?
示例代码:
class Student
{
private:
int m_id;
public:
Student(int id)
{
m_id = id;
};
~Student();
int getId()
{
return m_id;
};
};
Student myFunc()
{
return Student(123);
}
int main()
{
//How does 'student1' get the value from the function?
//Does 'myFunc' write directly to the stack of main?
Student student1 = myFunc();
return 0;
}
Run Code Online (Sandbox Code Playgroud) 1)C结构如何传递给汇编函数。我的意思是按值传递,而不是按引用传递。2)顺便说一下,被调用方如何将结构返回给其调用方?由于我的母语不是英语,所以我为自己的表现不好而感到抱歉。
我编写了一个简单的程序来验证C结构如何传递给函数。但是结果令人惊讶。寄存器传递了一些值,但将它们压入堆栈则传递了一些值。这是代码。
源代码
#include <stdio.h>
typedef struct {
int age;
enum {Man, Woman} gen;
double height;
int class;
char *name;
} student;
void print_student_info(student s) {
printf("age: %d, gen: %s, height: %f, name: %s\n",
s.age,
s.gen == Man? "Man":"Woman",
s.height, s.name);
}
int main() {
student s;
s.age = 10;
s.gen = Man;
s.height = 1.30;
s.class = 3;
s.name = "Tom";
print_student_info(s);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
汇编
6fa: 55 push %rbp
6fb: 48 89 e5 mov %rsp,%rbp
6fe: 48 83 …Run Code Online (Sandbox Code Playgroud)