如何在没有GC分配的情况下初始化D中的静态数组?

Pet*_*der 10 arrays performance memory-management d static-array

在D中,所有数组文字都是动态数组,因此由GC分配.

即便在这个简单的例子中:

int[3] a = [10, 20, 30];
Run Code Online (Sandbox Code Playgroud)

数组是堆分配的,然后复制到a.

如何在没有堆分配的情况下初始化静态数组?

你可以手动完成:

int[3] a = void;
a[0] = 10;
a[1] = 20;
a[2] = 30;
Run Code Online (Sandbox Code Playgroud)

但这充其量是乏味的.

有没有更好的办法?

Vla*_*eev 9

static const int[3] a = [10, 20, 30];
Run Code Online (Sandbox Code Playgroud)

这将在数​​据段中放置一个常量副本.您可以使用简单的赋值(auto copy = a;)在堆栈上创建一个副本(不涉及堆分配).

  • 好吧,有道理,虽然有点乏味,你必须声明一个静态const版本然后复制它.谢谢. (2认同)