I think I see that's the problem.
Relacy detects some problem, and then starts building execution
history. And it seems that execution history is just too big. Yes,
that big so it consumes whole 32-bit address space.
You know, it's coded in 'modern' style, so that there are several
std::sringstreams involved and a lot of copying and temporal strings
and so on.
I'm able to model the issue with simple test:
VAR_T(int) x;
std::atomic<int> y;
for (;;)
{
for (int i = 0; i != 100; i += 1)
VAR(x) = 0;
y.store(0, std::memory_order_relaxed);
}
You set p.execution_depth_limit = 10000, but it does not count
operations on VAR_T variables (because they do not call scheduler),
however operations on VAR_T participate in history. So actual history
size can be much bigger than 10000.
I will optimize history output to handle big histories gracefully.
As for now, you may replace some VAR_T with plain vars... or switch to
64-bit mode.
--
Dmitriy V'jukov