#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <string.h>
#include <time.h>
void make_randmsg( unsigned char* msg, int byte_size );
int main()
{
unsigned char* key;
int keylen = 65536;
key = (unsigned char*)malloc(sizeof(unsigned char) * (keylen*2) );
make_randmsg(key, keylen);
return 0;
}
void make_randmsg(unsigned char* msg, int byte_size)
{
int i = 0;
int randnum;
memset(msg, \'\\0\', byte_size*2);
srand((unsigned int)time(NULL));
if(byte_size == 0)
msg = NULL;
else
{
for( i = 0 ; i < byte_size ; i++)
{
randnum = rand() % 256;
sprintf((char *)msg, \"%s%02x\", msg, randnum);
}
}
printf(\"%d byte random Message : \\n\", byte_size);
printf(\"%s\\n\\n\", msg); // Testing 용
}
이게 제가 짠 코든데요..
한 10000 byte 정도까지는 한2~3초 정도 거려서 생성이되는데요
제가 해야되는건 65536 byte길이를 생성해야 되는데..
한바이트씩 생성해서 이어붙이기로 하니깐 오래 걸리더라구요....
코드 보시고 혹시 속도를 좀 빠르게 생성해낼수 있는 방법 아시는 분 계시면 코멘트좀 달아주세요 ㅠ
기초적으로 할수있는것은 for 대신 doWhile을 써보시고 char array에 붙여넣기보단 list를 만들어서 .append를 써보시는것도 좋을것같네요. 제가 C를 한번도 안해봐서 어떻게 신텍스가 좀 어렵네요. 그리고 또한 힙사이즈를 늘려보는것도 방법일것같네요
흠 그리고 byte size의 max가 255라 rand %256 해야된다면 어쩔수없이 loop은 해야될것같네요.
CPU가 여러개면 병렬처리
for 랑 do~while 이랑 성능상 무슨차이가 있는지 설명할수있냐..? 서로 구분된 어셈코드로 설명할것... do~while 로 바꾸면 성능이 올라간다니 좀 어이가없네 ㅋ
일단 sprintf 함수가 문자열 처리로는 가장 느린 함수야. 이게 원인일꺼야. 해결책은 음.. 좀 봐야겠군..
10진수를 16진수로 직접 바꾸어서 하나씩 대입해주는게 제일 날거같긴한데..
이건.. 직접 찾아서 해봐.. 나도 잘 모르겠음 -_- 그리고, sprintf((char *)msg, \"%s%02x\", msg, randnum); 이게 지금 값이 커질수록 엄청나게 느려질수밖에 없는 문제야..
끝쪽에 추가만하면 되는데.. 지금 전체카피를 계속 반복하잖아.. 미친 코드임;;
실무에서 이렇게 짜면, 욕 제대로 먹는수가 있다..ㅎㅎ
일단 sprintf 가 느린 함수긴 한데, 진수변환을 내가 잘 몰라서 일단 개선된 코드. 올려줄게.