Boost logo

Boost :

From: John Maddock (john_at_[hidden])
Date: 2005-07-18 07:22:35


I've tracked down the cause of the random_test failures with some Win32
compilers (Borland and Intel 8 and 9 certainly).

Within the test, the random number generator gets passed around by value
when constructing a variate_generator. However there are a couple of
generators that contain large arrays of long's (the mersenne twister is the
first to be tested that has this problem). It's reasonably well known that
on Windows, copying large arrays on the stack can overrun Window's stack
protection and growth mechanism, resulting in the program trying to write to
an invalid address.

For the Borland compiler, adding:

<linkflags>-lS:8000000 <linkflags>-lSc:8000000

Fixes the regression.

For Intel adding:

<linkflags>-STACK:8000000:8000000

Works most of the time, but seems to be a bit capricious (it appears you
have to delete all temporary linker files before attempting the link,
otherwise strange things happen).

I'm not even sure if this is the right fix: should we really be passing such
large arrays around on the stack in the first place?

John.


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk