EPr*_*und 5 arrays delphi compare
我需要比较给定数组的所有项目是否相同。
现在,我有以下代码:
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');
Run Code Online (Sandbox Code Playgroud)
这工作正常,但是由于CompareMem是用汇编编写的,因此我(目前)还无法理解它的作用。
CompareMem是执行我想要的事情的有效方法吗?另外,我想知道是否适用于所有数据类型,例如字符串,整数等。
这不是用汇编语言编写的。如果所有内存中都填充有没有间隙的数组项,则比较内存有效。通常,如果
1)所有阵列内存中都填充有没有间隙的数据(间隙可能包含垃圾并导致假负数)。
1.1。packed array如果编译器不会忽略它,则应通过关键字强制执行
1.2如果SizeOf(A [1])为2,4,8,16等,则应该发生这种情况
但是您最好通过使用具有不同模式的FillChar进行单元测试来覆盖这一点-它们将模仿垃圾,然后用匹配值手动填充数组元素,然后使用CompareMem检查元素是否擦除了所有预先填充的垃圾。
2)数组元素仅包含简单的值类型,而不包含引用类型。
Char,整数,双精度型,短字符串,固定大小的数组或由它们组成的记录-是简单类型。
所有其他字符串,指针,对象,接口,动态数组和开放数组-仅仅是指向外部数据的指针,无法“通过内存”进行比较
您可以阅读有关http://docwiki.embarcadero.com/Libraries/XE2/en/System.Finalize的更多提示。程序/函数的汇编程序实现也将是一个不错的话题,因为它将涵盖不同Delphi数据类型的二进制表示形式