Extremely poor performance crunching random numbers under PIV-FC5

BankHacker bankhacker at gmail.com
Fri May 19 14:16:40 UTC 2006


> Filling szBufferState with random data is completely unnecessary,
> initstate_r overwrites it anyway.
> If you want to initialize randomdataState the same way srandom(seconds);
> does, don't open /dev/urandom at all and just do:
> static int buf[32];
> memset (randomdataState, 0, sizeof (*randomdataState));
> initstate_r (seconds, (char *) buf, 128, &randomdataState);

Jakub, I have tried to do what you propose but the following code is
throwing an error in execution time:

### prueba-3.c ##################################################
	#include <stdio.h>
	#include <stdlib.h>
	#include <fcntl.h>

	int bucle_random_r() {
		int nRandom;
		struct random_data *randomdataState;
		static int buf[32];
		time_t seconds;
		extern void *memset (void *__s, int __c, size_t __n) __THROW;

		memset(randomdataState, 0, sizeof(*randomdataState));
		initstate_r(seconds, (char *) buf, 128, randomdataState);

		random_r(randomdataState, &nRandom);
		printf("%d\n", nRandom);

		return 1;
	}


	int main(int argc, char ** argv) {
		bucle_random_r();
		return (0);
	}
#################################################################

This is the result:
	# gcc prueba-3.c -o 3prueba -Wall -pedantic -O0

	#./3prueba
	Segmentation fault

The "Segmentation fault" occurs when executing memset instruction. I
don't know why ...




More information about the fedora-list mailing list