gpt4 book ai didi

d - 内存分配和 Mir

转载 作者:行者123 更新时间:2023-12-04 10:51:03 25 4
gpt4 key购买 nike

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

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

最佳答案

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);

而第二个要优雅得多。

关于d - 内存分配和 Mir,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59471367/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com