c ++:用随机字节填充缓冲区的最快方法

Gab*_*iMe 18 c++ windows winapi

我有这个大字符数组需要填充高频率的随机字节.我想知道除了天真的方式(使用for循环 - 用随机字节填充每个单元格)之外是否有更快的方法来执行此操作.对值的随机质量没有要求.任何"随机"垃圾都可以.平台是窗户

wor*_*rty 20

真随机(仅限Unix):

int fd = open("/dev/random", O_RDONLY);
read(fd, your_buffer, buffer_size);
Run Code Online (Sandbox Code Playgroud)

不完全随机(仅限Unix):

int fd = open("/dev/urandom", O_RDONLY);
read(fd, your_buffer, buffer_size);
Run Code Online (Sandbox Code Playgroud)

恒定随机(除非你使用srand(time(NULL)),便携式):

for(size_t i = 0; i < buffer_size; i++)
    your_buffer[i] = rand() % 256;
Run Code Online (Sandbox Code Playgroud)

或类似的东西:

memcpy(your_buffer, (void*)memcpy, buffer_size);
Run Code Online (Sandbox Code Playgroud)


sas*_*ang 5

取决于您使用的是 Linux 还是 Windows,但在 Linux 上从 /dev/random 执行 memcpy 应该可以。

在 Windows 上,您可以使用 CryptGenRandom 用随机数据填充缓冲区:http : //msdn.microsoft.com/en-us/library/aa379942.aspx。显然,这相当于从 /dev/random 读取数据的 Windows。Python 使用它OS.urandom在 Windows 上实现其功能:http : //en.wikipedia.org/wiki/CryptGenRandom