d - 内存分配和 Mir

  • 本文关键字:Mir 分配 内存 d mir
  • 更新时间 :
  • 英文 :


我正在尝试在需要最小化动态分配的环境中工作,我很好奇切片函数在内存分配方面是如何工作的。我环顾四周,没有找到多少。

如果切片大小恒定,是否可以在堆栈上分配切片?

import std; 
@nogc void main()
{          
import mir.ndslice;
import mir.ndslice.topology; 
import mir.blas : gemv, gemm;
scope double[9] aData = 0;
scope double[3] vData = [1, 2, 1]; 
scope double[3] cData;
auto A = aData.sliced.sliced(3, 3);
auto v = vData.sliced.sliced(3, 1);
auto c = cData.sliced.sliced(3, 1);
A.diagonal[0] = 2;
A.diagonal[1] = 1;
A.diagonal[2] = 0;
// c = 1 * A * v + 0 * c
gemm!double(1, A, v, 0, c);
}

实验了相当多,并将其作为我的零 GC(当然减去 writeln(线性代数。看起来很笨重,我希望有更好的东西,比如切片。

最近再次发现了D,并试图看看当需要线性代数算法时,它是否有机会为某些机器人项目确定性地做这些事情。

可能不应该使用 gemm,但不想挖掘 gemv。不像slice!double(3, 3)那样优雅

亚当说了一些关于切片永远不会被分配的事情,但我仍然对让 GC 松动持谨慎态度。

我通常与许多直流电机一起工作,进行运动学仿真。毫秒级计时至关重要,D 建议它可以是这样的,所以我检查了它,因为C++使用起来很痛苦。

虽然我不得不问为什么这不起作用。

double[9] a_data;
scope A = a_data.sliced(3, 3);

当这...

auto a_data = new double[9]; // Gah new?!
scope A = a_data.sliced(3, 3);

而第二个则要优雅得多。

最新更新