memset初始化数组变量
int d[5];进行初始化时:
使用memset(d,0,sizeof(d));与使用:
for (i=0; i<5; i++) {
d[i]=0;
}
有何不同么?谢谢!
[解决办法]
效果都一样 ,效率上吗,我觉得可能memset高一点,只是个人感觉,具体不太清楚。
[解决办法]
memset是按字节填充的 可以精确到字节
for只是一个赋值操作 每个int四个字节(32位) 是对整体的操作
[解决办法]
结果是一样的,memset效率大概要高些
[解决办法]
[解决办法]
这就是结果:
- C/C++ code
#include <stdio.h>#include <string.h>int main(int argc, char **argv){ int d[2]; memset(d,1,sizeof(d)); printf("%d\t%d\n", d[0], d[1]); d[0]=1; d[1]=1; printf("%d\t%d\n", d[0], d[1]); return 0;}[vince025@shell ~/tests]$ gcc -o memsetDemo memsetDemo.c[vince025@shell ~/tests]$ ./memsetDemo16843009 168430091 1[vince025@shell ~/tests]$
[解决办法]
[解决办法]
有现成的就先用,看看标准c的memset是怎么实现的就能知道了,说不准它在私底下也是一个大循环一个单元一个单元置零呢
[解决办法]
memset效率好一些吧。
[解决办法]
[解决办法]
[解决办法]
效率上没区别,memset也是使用循环来做
[解决办法]
测试了一下,两个使用时间相同的!
[解决办法]
怎么看时间啊?求教,本人初学c。。。
[解决办法]
memset是按字节来填充的,当填充int类型的数组时,效率是不如直接用for的
不过0是例外的,填充0的时候是调用memzero的
至于填充效率在一定的数量级以下没有什么意义
可以做个试验看看,用for和memset填充个几百兆的内存看看
[解决办法]
[解决办法]
不明白你们对数组置0需要用for?
直接 int d[5] = {0};
memset一般对分配出来的内存或复杂的结构进行清0操作
对新人希望你们不仅解决问题,还需要提示一些什么
[解决办法]
C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\memset.c
- C/C++ code
/****memset.c - set a section of memory to all one byte** Copyright (c) Microsoft Corporation. All rights reserved.**Purpose:* contains the memset() routine********************************************************************************/#include <cruntime.h>#include <string.h>#pragma function(memset)/****char *memset(dst, val, count) - sets "count" bytes at "dst" to "val"**Purpose:* Sets the first "count" bytes of the memory starting* at "dst" to the character value "val".**Entry:* void *dst - pointer to memory to fill with val* int val - value to put in dst bytes* size_t count - number of bytes of dst to fill**Exit:* returns dst, with filled bytes**Exceptions:********************************************************************************/void * __cdecl memset ( void *dst, int val, size_t count ){ void *start = dst;#if defined (_M_IA64) || defined (_M_AMD64) { __declspec(dllimport) void RtlFillMemory( void *, size_t count, char ); RtlFillMemory( dst, count, (char)val ); }#else /* defined (_M_IA64) || defined (_M_AMD64) */ while (count--) { *(char *)dst = (char)val; dst = (char *)dst + 1; }#endif /* defined (_M_IA64) || defined (_M_AMD64) */ return(start);}
[解决办法]