游戏开发论坛

 找回密码
 立即注册
搜索
查看: 18160|回复: 21

ZeroMemory 和memset的速度谁快?

[复制链接]

22

主题

144

帖子

193

积分

注册会员

Rank: 2

积分
193
发表于 2007-7-20 13:04:00 | 显示全部楼层 |阅读模式
最近看到了一些sample,里面初始化struct都使用ZeroMemory API,但是C\C++ 的库函数提供了memset,这两者有冲突么?一般来说memset都是初始化成0,但是为什么win32 api有一个重复功能呢?microsoft有优化它么?

我回去看看asm代码去。。。

谁能说说啊?

2万

主题

2万

帖子

6万

积分

论坛元老

Rank: 8Rank: 8

积分
66489
QQ
发表于 2007-7-20 13:34:00 | 显示全部楼层

Re:ZeroMemory 和memset的速度谁快?

ZeroMemory是映射的memset

0

主题

275

帖子

676

积分

高级会员

Rank: 4

积分
676
发表于 2007-7-20 13:39:00 | 显示全部楼层

Re:ZeroMemory 和memset的速度谁快?

ZeroMemory 是MACRO..?用RtlZeroMemory
RtlZeroMemory也是MACRO 直接?用memset

#define RtlZeroMemory(Destination,Length) memset((Destination),0,(Length))

0

主题

36

帖子

36

积分

注册会员

Rank: 2

积分
36
发表于 2007-7-20 16:42:00 | 显示全部楼层

Re:ZeroMemory 和memset的速度谁快?

不知道memset是不是一个字节一个字节的设?

0

主题

243

帖子

357

积分

中级会员

Rank: 3Rank: 3

积分
357
发表于 2007-7-20 17:41:00 | 显示全部楼层

Re: ZeroMemory 和memset的速度谁快?

Release时会对Zeromemory做一些优化,但也有可能会因为这些优化导致错误。
memset就不会了。。。

15

主题

368

帖子

406

积分

中级会员

Rank: 3Rank: 3

积分
406
发表于 2007-7-20 22:02:00 | 显示全部楼层

Re:ZeroMemory 和memset的速度谁快?

初始化要啥memset和ZeroMemory

struct a = {0};
编译器帮你搞定。性能绝对不赖。

PS:巨讨厌没事也要用WINAPI函数的家伙。在一个工程里,别人都写memset和memcpy,有人就偏要在里面写ZeroMemory和CopyMemory,我看到就恼火。

0

主题

769

帖子

1052

积分

金牌会员

Rank: 6Rank: 6

积分
1052
发表于 2007-7-21 00:37:00 | 显示全部楼层

Re:ZeroMemory 和memset的速度谁快?

楼上的,ZeroMemory我咋用得挺舒服的啊
好像没什么不好吧?memcpy我也用
我看东西还是看个人习惯吧:)
反正都能看懂

33

主题

544

帖子

554

积分

高级会员

Rank: 4

积分
554
发表于 2007-7-21 09:46:00 | 显示全部楼层

Re:ZeroMemory 和memset的速度谁快?

没有用过zeromemory......

6

主题

47

帖子

53

积分

注册会员

Rank: 2

积分
53
发表于 2007-7-21 16:25:00 | 显示全部楼层

Re: Re:ZeroMemory 和memset的速度谁快?

yukun84: Re:ZeroMemory 和memset的速度谁快?

初始化要啥memset和ZeroMemory

struct a = {0};
编译器帮你搞定。性能绝对不赖。

PS:巨讨厌没事也要...


struct a = {0};
编译出来的东西不一行的哇

2

主题

79

帖子

85

积分

注册会员

Rank: 2

积分
85
QQ
发表于 2007-7-22 20:08:00 | 显示全部楼层

Re: Re:ZeroMemory 和memset的速度谁快?

yukun84: Re:ZeroMemory 和memset的速度谁快?

初始化要啥memset和ZeroMemory

struct a = {0};
编译器帮你搞定。性能绝对不赖。

PS:巨讨厌没事也要...


    你这样看法是错误的。

    struct a = {0}; 如果你是在执行代码里加上这一句,实际上它是占用运行时间来清零,而并不是在编译期就清0。 = 是一个赋值操作符,如果你没有定义自已的操作符实现,编译器用自已默认的算法,是按 位 清0,记住,是按 bit 清的,效率是最差哪种。

    所以,一般是自义清零功能,调用memset,而memset是用汇编级的指令实现,现在的主流CPU可以实现一个机器指令清零。

    good luck!


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-8 15:55

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表