Yes, String does not do a good job of recovering memory. If in loop(0, the free memory reduces each cycle until it crashes. However, the File library, included in SD, is OK to create an instance for each write, so that each record can open and close. My problem is with SD's SRAM usage, needing 400 bytes free before making a record. In my latest project (see http://projects.worsleyassociates.com/ArdurinoLogger/index.html?) I had to use PROGMEM to cut my SRAM footprint. Since I had to write a custom LCD class anyway,(because I used a shift register) I put the excess code to display a string from the program memory in a method.