【发布时间】:2013-06-19 15:02:33
【问题描述】:
我需要比较给定数组的所有项是否相同。
目前,我有以下代码:
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 是一种有效的方式来做我想做的事吗?另外,我想知道是否适用于字符串、整数等每种数据类型。
【问题讨论】:
-
使用 CompareMem 仅适用于简单数据类型。如果数据是托管类型,例如对象、字符串、动态数组等,那么您只是在比较指针值。
-
一般答案是否,因为数组元素可能是aligned。但是,如果您打算永远使用 Borland 编译器和 Intel 架构,您可以安全地做到这一点(这是因为 Borland 数组隐含
packed)。