相关疑难解决方法(0)

当用作函数的返回值时,C#结构是否曾被装箱?

一个简单的问题,但我还没有找到Stack Overflow的明确答案.

    struct foo { int x; int y; int z; }

    foo Func()
    {
        return new foo();
    }
    void Func2()
    {
        foo f = Func();     // did boxing and unboxing occur?
    }
Run Code Online (Sandbox Code Playgroud)

从函数返回时,C#struct(值类型)是否始终复制到堆栈中,无论它有多大?我不确定的原因是,对于除MSIL之外的一些指令集(例如x86),返回值通常需要适合处理器寄存器,并且不直接涉及堆栈.

如果是这样,那么调用站点是否为CLR堆栈预先分配了(预期)值返回类型的空间?

[编辑:回复摘要:]对于原始问题的意图,答案是否定的; CLR永远不会(默默地)将结构化为仅仅为了将其作为返回值发送.

c# struct boxing return-value value-type

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

eax存储返回值的大小如何大于4个字节?

EAX用于存储32位平台中函数的返回值,我只是想知道一个函数的返回值大小是否大于4个字节,eax如何处理呢?在这种情况下,OS可以将返回值保存在堆栈中并将堆栈的地址存储在EAX中,但是OS如何判断存储在EAX中的值是返回值的地址还是实际上是返回值本身?

assembly return-value cpu-registers

7
推荐指数
1
解决办法
2308
查看次数

标签 统计

return-value ×2

assembly ×1

boxing ×1

c# ×1

cpu-registers ×1

struct ×1

value-type ×1