//在 delphi 新版中, char 已经是双字节了。故应该重新自己写一个函数,取名为 FillByte ,才无歧义。
procedure TForm1.Button2Click(Sender: TObject);
// 功能,将 Buff 数组快速填充为一个值,如 65
const
MaxLen = 1024;
var
Buff: array [0 .. MaxLen] of byte;
p: PByte;
i: integer;
begin
p := @Buff[0]; // 1 . 初学者写法。
for i := 0 to MaxLen do
begin
Buff[i] := 65; // 如果 Buff 是 delphi 的 string 类型
// 则 Buff[i] 会有一个定位元素的函数调用,代码效率降低了。
end; // 2. 进阶者写法,也可以称之为明白人写法。
// 此写法清晰明白地使用了指针,是常用的方法。
// 即使 Buff 为 delphi 的 string 类型,仍然高效。
for i := 0 to MaxLen do
begin
p^ := 65;
inc(p);
end; // 3. 怪异用法,这是语法特性, c 语言中也有这样的写法
// 可以少写代码,省事。效率与方法2相当。
for i := 0 to MaxLen do
p[i] := 65; end; procedure TForm1.Button1Click(Sender: TObject);
// 功能,将 Buff 数组快速填充为某一个值,如 65 (16 进制0x41 )
const
MaxLen = 1024;
var
Buff: array [0 .. MaxLen] of byte;
PB: PByte;
PI: PInt64;
D: int64;
i, Count: integer;
begin
// 方法4,高级用法。
// 充分利用寄存器的长度,一次填充8个 Byte
// 此写法综合评比最优写法。既高效,又灵活跨越各平台。
PB := @Buff[0];
PI := PInt64(PB);
D := $4141414141414141; // Count := (MaxLen + 1) div 8;
for i := 0 to Count - 1 do
begin
PI^ := D;
inc(PI);
end; // 填充剩余的位置
Count := (MaxLen + 1) and $7; // 等同于 MaxLen mod $7;
PB := PByte(PI);
for i := 0 to Count - 1 do
begin
PB^ := $41;
inc(PB);
end; end; procedure TForm1.Button3Click(Sender: TObject);
// 功能,将 Buff 数组快速填充为某一个值,如 65 (16 进制 0x41 )
const
MaxLen = 1024;
var
Buff: array [0 .. MaxLen] of byte;
p: pointer;
i, Count: integer;
begin
// 方法5 ,骨灰级写法
// 惊天地,泣鬼神,为了效率,啥也不顾了。
// 此为宇宙中效率最高写法,可惜,跨平台或有困难。
Count := (MaxLen + 1) div 4;
p := @Buff[0];
asm
cld;
mov eax,$41414141; // 因为是32位,所以4个字节
mov ecx,count;
mov edi,p;
rep stosd;
end;
Count := (MaxLen + 1) mod 4;
if Count > 0 then
asm
cld
mov eax,$41;
mov ecx,count;
mov edi,p;
rep stosb;
end;
end;

  

最新文章

  1. SQLServer------将表和内容导入到另一个数据库
  2. 弱省互测#0 t2
  3. JAVASCRIPT 中 FOR (VAR I IN DATA) 循环数组项
  4. WPA: 4-Way Handshake failed - pre-shared key may be incorrect
  5. 如何切入 Linux 内核源代码
  6. UISerachBar / UISearchDisplayController
  7. Swift游戏实战-跑酷熊猫 06 创建平台类以及平台工厂类
  8. Oracle性能优化--AUTOTRACE 操作
  9. Android启动画面实现
  10. HDU 2295 Radar (DLX + 二分)
  11. hadoop学习记录(零)
  12. clock_gettime测代码运行时间
  13. Linux tr 命令使用
  14. SQL中存储过程和自定义函数的区别(转载)
  15. 自动分组+合并完整的sql脚本
  16. zoj3713 7Bit
  17. 【DataStructure】Some useful methods for arrays
  18. linux c 需要掌握的技能大概——前辈的话
  19. DB2的日志理解难点
  20. HBRUSH to RGB value

热门文章

  1. layer ui插件显示tips时,修改字体颜色
  2. IT 必备电脑快捷键
  3. python Mysql 库表
  4. Python:使用youtube-dl+ffmpeg+FQ软件下载youtube视频
  5. hdu1009 FatMouse' Trade---贪心
  6. python判断素数的方法
  7. Java入门2
  8. java中的多态案例
  9. [LeetCode] Split Linked List in Parts 拆分链表成部分
  10. tkinter 创建登陆注册界面