首页
社区
课程
招聘
内存写速度低于内存读的速度?
发表于: 2017-2-25 12:32 3593

内存写速度低于内存读的速度?

2017-2-25 12:32
3593

最近在研究北信源U盘,用穷举法测试密码,在网上找了段穷举密码算法,发现内存读的速度约快于内存写的速度1倍以上,制约穷举速度主要是内存写的速度,是否是内存写速度低于内存读的速度?

网上抄的穷举算法代码

//******************************************************************* 
//在许多情况下我们需要穷举组合的算法,比如密码词典。 
//这个算法的要害是密码下标进位的问题。 
//另外本例子中的写文件语句效率比较低,为了降低算法复杂度没有优化。 
//假如要提高写文件的效率,可以使用缓冲区,分批写入。 
//*********************************************breath.cnpick.com***** void createpassWord() 

#define passwordmax 8//将生成密码的最大长度 char a[]="0123456789abcdefghijklmnopqrstuvwxyz";//可能的字符 
long ndictcount=sizeof(a);//获得密码词典长度 
char cpass[passwordmax+2];//将生成的密码 
long nminl=1,nmaxl=3;//本例中密码长度从1-3 
long array[passwordmax];//密码词典下标 assert(nminl<=nmaxl && nmaxl<=passwordmax);//容错保证 
long nlength=nminl; 
register long j,i=0; 
bool bnext; 
cstdiofile file; 
file.open("c:\\dict.txt",cfile::modecreatecfile::modewrite); 
while(nlength<=nmaxl) 

for(i=0;i<passwordmax;i++) 
array[i]=0; 
bnext=true; 
while(bnext) 

for(i=0;i<nlength;i++) 
cpass[i]=a[array[i>; 
cpass[i]='\0'; 
file.writestring(cpass); 
file.writestring("\n"); 
for(j=nlength-1;j>=0;j--)//密码指针进位 

array[j]++; 
if(array[j]!=ndictcount-1)break; 
else 

array[j]=0; 
if(j==0)bnext=false; 

} } 
nlength++; 

file.close(); 


测试情况

for(i=0;i<nlength;i++)

{

tttemp =CreackPwd[array[i]];//读内存

cpass[i] =tttemp;//写内存

}

分别注释循环中的两行,速度分别为1.2亿个密码/秒和0.4亿个密码/秒,内存写的速度低于读的速度。

哪位有好的穷举算法能提供个不。



[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 18
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2

ram本质就是电容器,给电容充放电+校验的时间肯定比直接读取通断信号来得慢啊,参考资料如下 http://blog.csdn.net/misskissc/article/details/40900893 顺便一说,穷举算法这种东西适合并行化操作,可以考虑opencl或cuda利用显卡的多核优势和显存带宽优势来处理(显卡对于大数据读写有优化,数据总线的吞吐量比主机快)

2017-2-26 03:28
0
雪    币: 18
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
至于你说的写入文件速度慢这个问题,其实可以利用内存映射的方式来搞定(这样可以把单次写入数据大小、需要开辟的缓冲区大小等问题丢给操作系统以获得较高效率了)
2017-2-26 03:35
0
雪    币: 246
活跃值: (91)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
谢谢
2017-2-26 08:35
0
游客
登录 | 注册 方可回帖
返回
//