小编Khá*_*ang的帖子

Dlang - 在装配中低估std.cycle()

import std.range : cycle;
void foo() pure @safe {
    cycle([1, 2]);
}
Run Code Online (Sandbox Code Playgroud)

今天我遇到了用D语言编写的程序.我试图了解它的汇编代码,从一个简单的函数开始.

D编译器资源管理器上的asm输出:

pure nothrow @nogc @safe std.range.Cycle!(int[]).Cycle std.range.cycle!(int[]).cycle(int[]):
 push   rbp
 mov    rbp,rsp
 sub    rsp,0x40
 mov    QWORD PTR [rbp-0x20],rdi
 mov    QWORD PTR [rbp-0x10],rsi
 mov    QWORD PTR [rbp-0x8],rdx
 ... rest of the function
Run Code Online (Sandbox Code Playgroud)

我已经尝试了几次读它,但无法理解为什么 std.range.cycle()得到3个参数(RDI,RSIRDX),或者我的范围是([1, 2]).它不是一个类似C的结构?

或者我错过了什么?

assembly d x86-64 std abi

4
推荐指数
1
解决办法
134
查看次数

标签 统计

abi ×1

assembly ×1

d ×1

std ×1

x86-64 ×1