字符数组初始化的效率提升(千分问题系列之一)(50分)

  • 主题发起人 主题发起人 游游
  • 开始时间 开始时间

游游

Unregistered / Unconfirmed
GUEST, unregistred user!
我的程序对时间要求比较苛刻,其中有
对一个字符数组初始化(全为#00)最快的方法是什么?
普通方法是循环语句逐一赋值,当数组较大时效率不高。
还有一个方法是先初始化一个数组,再赋值给这个数组,不知和上面的相比,效率提高了吗?
(临时数组的初始化效率不用考虑)
其他的有直接对内存的数组存放区整块赋值......等等
还有什么更好的方法吗?
我想这个问题并不难,只是要有经验而已。
这是千分问题系列之一,以后还有更多的与我一个程序相关的问题,大概都不是很难,
我只是想花最少的时间获取别人的经验。
 
fillchar(arr[low(arr)],length(arr),#0);
 
FillChar() or
ZeroMemory
 
我想FillChar可以也是一个一个地赋值吧
 
to 教父:
应该不是一个一个赋值得,help里说FillChar不检查边界,所以我怀疑是用memset实现
的。

to 游游:
如果用delphi觉得不够快的话,用C写一个dll调用吧,c的memset是优化过得,很快的
 
fillchar就够了,什么TMD的不检查边界,会不会看帮助啊!help的意思是,如果
第二个参数length超长的话,可能会破坏别的变量的内存,而这个可能性,delphi
是不负责检查的,所以只要length正确,就不会出错。

如果大家都像你这样看帮助,中国就完蛋了!
 
有关数组赋值的另个问题:
delphi中能否找到象c语言中那样的集体赋值方式
如:
type point=record
x:real;
y:integer;
end;
var
arr:array[1..10]of point;
begin
arr:=((1,2),(3,4),(5,6),......,(19,20));
end;
如果要给数组赋不同的值用什么方法最方便?
 
TTestA = Record
ItemA: String;
ItemB: String;
ItemC: Integer

end;

Type Test = Record
ID: Integer
Item: TTestA;
end;

Const
First: Array [0 .. 2] of TTestA = (
//该如何写这段初始化)

Secord:array [0..2] of Test=(///初始化代码如何写?);

回答:
集合的初始化必须明确指定每一个字段的名称和值,并且各个字段之间用;分隔。
First: array[0..1] of TTestA = (
(ItemA: '0 ItemA String'
ItemB: 'ItemB String'
ItemC: 10),
(ItemA: '1 ItemA String'
ItemB: '1 ItemB String'
ItemC: 20),
()
);
Secord: array[0..1] of Test = (
(ID: 10
Item: (ItemA: 'Test 0 ItemA'
ItemB: 'Test 0 ItemB'
ItemC: 10)),
(ID: 20
Item: (ItemA: 'Test 1 ItemA'
ItemB: 'Test 1 ItemB'
ItemC: 20)),
()
);
 
非常感谢!
 
后退
顶部