If the placemark held copies, i could discard the originals. Either way, that's still 4000 children objects hanging around. When i've generated kml by writing to a file stream, the data can be discarded as soon as the placemark is written to the file. Since libkml does the serialization at the end, it has to be held in memory. Perhaps it's little memory and just the price for ensuring valid kml. I was just wondering if what i described was the normal approach.
As a new user, it seems to me that libkml is better suited for parsing kml than generating it. The kmlconvenience namespace could use more creation classes, IMHO.