我正在实现一个带有指向一些手动管理内存的指针的结构。这一切都适用于 DMD,但是当我使用 GDC 对其进行测试时,它会因opEquals
运算符重载而失败。我已将其范围缩小到 memcmp。在opEquals
我将指向内存与 memcmp 进行比较时,它在 DMD 中的行为与我预期的一样,但在 GDC 中失败。
如果我返回并opEquals
通过使用内置类型一次比较存储在手动管理内存 1 中的每个值来编写该方法==
,则它在两个编译器中都有效。我更喜欢 memcmp 路线,因为它写起来更短,而且看起来应该更快(更少的间接、迭代等)。
为什么?这是一个错误吗?
(我使用 C 的经验是 10 年前,从那以后一直在使用 python/java,我在 C 中从未遇到过这种问题,但我并没有用那么多。)
编辑:
我正在比较的内存代表一个“真实”值的二维数组,我只是希望它被分配在一个块中,所以我不必处理锯齿状数组。我将在紧密循环中大量使用这些结构。基本上,我正在滚动我自己的矩阵结构,它将(最终)缓存一些经常使用的值(跟踪、行列式),并为不需要复制它的转置提供备用只读视图。我计划使用大约 10x10 到大约 1000x1000 的矩阵(尽管并不总是正方形)。
我还计划实现一个版本,通过 GC 分配内存ubyte[]
并分析这两个实现。
编辑2:
好的,我尝试了几件事。我也有一些parallel
循环,我有一种预感,这可能是问题所在。所以我添加了一些版本语句来制作并行和非并行版本。为了让它与 GDC 一起工作,我不得不使用非并行版本并更改real
为double
.
在 GDC 下编译的所有案例。但是单元测试失败了,并不总是在同一行上,而是在opEquals
我使用real
or时始终在通话中parallel
。在 DMD 中,所有案例都编译并运行没有问题。
谢谢,