stringstream не обязан хранить данные в строке. Так что функция str() просто собирает информацию в строку.
https://gcc.gnu.org/onlinedocs/libstdc++/libstdc++...
Судя по исходникам G++, их sstream хранит информацию в длинном буфере, но не в строке. Но и это не обязательно; буферов может быть много.
Так что, к сожалению, для экономии памяти придётся делать свой велосипед. Правда, как говорит
MiiNiPaa, некоторые задачи удастся выполнить и на stringstream’е, воспользовавшись, например, итератором.