CompareMem适合比较两个数组是否相等?

CompareMem适合比较两个数组是否相等?,第1张

概述我需要比较给定数组的所有项是否相同. 现在,我有以下代码: Type TD = array [0..1] of TDateTime;var A: TD; B: TD;begin A[0] := Date-1; A[1] := Date+1; B[0] := Date-1; B[1] := Date+1; if CompareMem(@A, @B, SizeO 我需要比较给定数组的所有项是否相同.

现在,我有以下代码:

Type  TD = array [0..1] of TDateTime;var A: TD;    B: TD;begin  A[0] := Date-1;   A[1] := Date+1;  B[0] := Date-1;   B[1] := Date+1;  if CompareMem(@A,@B,SizeOf(TD)) then    Showmessage('Equals')  else    Showmessage('Differ');

这工作正常但是因为CompareMem是用汇编编写的,我还不能(还)理解它的作用.

CompareMem是一种有效的方式来做我想要的吗?另外,我想知道是否适用于每个数据类型,如字符串,整数等.

解决方法 这不是在汇编中编写的……如果所有内存都填充了没有间隙的数组项,则比较内存是有效的.一般情况下,如果

1)所有阵列存储器都填充没有间隙的数据(间隙可能包含垃圾并导致假阴性).

1.1.这应该由packed array关键字强制执行,如果编译器不会忽略它

1.2如果SizeOf(A [1])为2,4,8,16等,则会发生这种情况

但是你最好通过使用不同模式的FillChar进行单元测试来覆盖它 – 它们会模仿垃圾,然后手动填充具有匹配值的数组元素,然后使用CompareMem检查元素是否擦除了所有预先填充的垃圾.

2)数组元素只包含简单的值类型,而不是引用类型.

字符串,整数,双字符串,短字符串,固定大小的数组或由它们组成的记录 – 都是简单类型.

所有其他字符串,指针,对象,接口,动态和开放数组 – 仅仅是指向外部数据的指针,无法通过“内存”进行比较

您可以阅读约http://docwiki.embarcadero.com/Libraries/XE2/en/System.Finalize以获取更多提示.程序/函数的汇编程序实现也是一个很好的主题,因为它将涵盖不同Delphi数据类型的二进制表示

总结

以上是内存溢出为你收集整理的CompareMem适合比较两个数组是否相等?全部内容,希望文章能够帮你解决CompareMem适合比较两个数组是否相等?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1266756.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存