From: Daryle Walker (darylew_at_[hidden])
Date: 2006-01-11 09:50:08
On 1/11/06 8:07 AM, "Robbie Vogt" <r.vogt_at_[hidden]> wrote:
> I've just been having some trouble with processes falling over and found
> to my surprise that writing out a matrix is eating up all my memory, and
> then some!
> The reason seems to be that operator << for both vectors and matrices
> compile their output to a temporary stringstream and then send its
> contents to the ostream handed to it (via c_str() ). Is there any logic
> reason to do this? This is obviously going to cause memory issues for
> large matrices for seeming no gain. I notice that the non-generic
> version don't bother with the temporary...
I don't know about uBLAS, but for general I/O reasons:
1. It's atomic, not in the multi-threaded/processor sense, but it
minimizes the chances that a partial printout is sent to the
stream. (If an exception occurs in the middle of the element
loop, nothing gets printed at all.)
2. It's less sensitive to the various formatting flags, some of
which (like width) would apply only to the very first item.
Preparing a string first allows uniform treatment of each
element. (And the width could apply to the whole printout.)
-- Daryle Walker Mac, Internet, and Video Game Junkie darylew AT hotmail DOT com