相关疑难解决方法(0)

存储的返回值在哪里?

我知道用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)

c c++

6
推荐指数
1
解决办法
258
查看次数

C结构如何传递给汇编函数?

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)

c assembly gcc x86-64 calling-convention

2
推荐指数
2
解决办法
157
查看次数

标签 统计

c ×2

assembly ×1

c++ ×1

calling-convention ×1

gcc ×1

x86-64 ×1