大音希声 善言不辩
C++博客
|
首页
|
发新随笔
|
发新文章
|
联系
|
聚合
|
管理
随笔:29 文章:3 评论:82 引用:0
[glibc源码分析] bzero
void
__bzero (
void
*
s, size_t len);
/**/
/*
将s的前len字节设为0
思路:先对齐到4的倍数的地址上,对前面的几B直接赋。然后,每次赋个32B,剩余凑不够32B的,
每次赋4B,剩余凑不够4B的,直接赋
*/
void
__bzero (
void
*
s, size_t len)
{
long
int
dstp
=
(
long
int
) s;
const
op_t zero
=
0
;
if
(len
>=
8
)
{
size_t xlen;
//
处理前面的几B,直到地址为4的倍数,然后可以每次4B
//
这样做的原因与结构体对齐的原因一样,是为提高读写数据的效率
//
由于len >= 8 ,OPSIZ=4,所以不必担心len==0
while
(dstp
%
OPSIZ
!=
0
)
//
#define op_t unsigned long int
//
#define OPSIZ (sizeof(op_t))
//
IA-32下是32
{
((
byte
*
) dstp)[
0
]
=
0
;
dstp
+=
1
;
len
-=
1
;
}
//
下面是典型的循环展开以提高效率,每次32B
//
若每次赋一个4B,程序会由于跳转太多而打断cpu流水线,降低效率
//
http://www.lysator.liu.se/c/duffs-device.html
//
关键字:Duff's Device
xlen
=
len
/
(OPSIZ
*
8
);
while
(xlen
!=
0
)
{
((op_t
*
) dstp)[
0
]
=
zero;
((op_t
*
) dstp)[
1
]
=
zero;
((op_t
*
) dstp)[
2
]
=
zero;
((op_t
*
) dstp)[
3
]
=
zero;
((op_t
*
) dstp)[
4
]
=
zero;
((op_t
*
) dstp)[
5
]
=
zero;
((op_t
*
) dstp)[
6
]
=
zero;
((op_t
*
) dstp)[
7
]
=
zero;
dstp
+=
8
*
OPSIZ;
xlen
-=
1
;
}
len
%=
OPSIZ
*
8
;
//
剩余的凑不足8 op_t 的
xlen
=
len
/
OPSIZ;
while
(xlen
!=
0
)
//
每次填4B
{
((op_t
*
) dstp)[
0
]
=
zero;
dstp
+=
OPSIZ;
xlen
-=
1
;
}
len
%=
OPSIZ;
}
while
(len
!=
0
)
//
剩余不够4B的,直接赋值
{
((
byte
*
) dstp)[
0
]
=
0
;
dstp
+=
1
;
len
-=
1
;
}
}
发表于 2008-11-27 09:48
霜之哀伤
阅读(2922)
评论(0)
编辑
收藏
引用
所属分类:
C/C++
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
确保基类有虚析构函数
再次批判 裘宗燕
[glibc源码分析] bzero
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(9)
给我留言
查看公开留言
查看私人留言
随笔分类
C/C++(3)
(rss)
Django(8)
(rss)
Python(9)
(rss)
STL
(rss)
娱乐(1)
(rss)
随笔档案
2009年5月 (2)
2009年4月 (3)
2009年3月 (7)
2009年2月 (1)
2009年1月 (1)
2008年12月 (11)
2008年11月 (4)
文章档案
2009年3月 (2)
2009年1月 (1)
最新评论
1. re: 再次批判 裘宗燕
评论内容较长,点击标题查看
--hhacker
2. re: 再次批判 裘宗燕
@孔志强
对对对 这个我也想说呢 话说在线应该是online阿
--xiaodong
3. re: 再次批判 裘宗燕
我猜楼主就是特别喜欢”鲁棒性“,”幽默“这样”广为人知”的翻译的人。只能遗憾地表示我国小学语文教育做得不好。
能做裘老师这样翻译技术书籍还在追求信、达、雅的老师的学生,我只能说感到幸运
--YangZX
4. re: 为Django应用增加列表显示功能
感谢,找了好一阵子才找到!
--flow
5. re: 【Word小技巧】图片自动编号与引用
会出现这样的错误
图 错误!文档中没有指定样式的文字。 1
自动编号前必须要先应用 多接列表 吧
请回邮件 brucmao#gmail.com
--brucmao
阅读排行榜
1. 【Word小技巧】图片自动编号与引用 (15198)
2. 再次批判 裘宗燕(6966)
3. 为Django应用建立数据库表(database tables)(4775)
4. 穿透内网远程桌面 (3664)
5. [glibc源码分析] bzero (2922)