TrueSize Incorrect for Soup Entries
One of the Newton 2.x OS Q&As
Copyright © 1997 Newton, Inc. All Rights Reserved. Newton, Newton Technology, Newton Works, the Newton, Inc. logo, the Newton Technology logo, the Light Bulb logo and MessagePad are trademarks of Newton, Inc. and may be registered in the U.S.A. and other countries. Windows is a registered trademark of Microsoft Corp. All other trademarks and company names are the intellectual property of their respective owners.
For the most recent version of the Q&As on the World Wide Web, check the URL: http://www.newton-inc.com/dev/techinfo/qa/qa.htm
If you've copied this file locally,click here to go to the main Newton Q&A page.
This document was exported on 7/23/97.
TrueSize Incorrect for Soup Entries (2/6/96)
- Q: When I use
TrueSize
to get the size of a soup entry I get results like 24K or even 40K for the size. That can't be right. What's going on?
A: TrueSize
"knows" about the underlying implementation of soup entries. A soup entry is really a special object (a fault block) that contains information about how to get an entry and can contain a cached entry frame. In the information about how to get an entry, there is a reference to the soup, and various caches in a soup contain references to the cursors, the store, and other (large) NewtonScript objects. TrueSize
is reporting the space taken up by all of these objects. (Note: calling TrueSize
on a soup entry will force the entry to be faulted in, even if it was not previously taking up space in the NewtonScript heap.)
The result is that TrueSize
is not very useful when trying to find out how much space the cached frame for an entry is using. A good way to find the space used for a cached entry frame is to call gc(); stats();
record the result, then call EntryUndoChanges(entry); gc(); stats()
. The difference between the two free space reports will be the space used by the cached frame for a given entry.
EntryUndoChanges(entry)
will cause any cached frame to be removed and the entry to return to the unfaulted state. Gc() then collects the space previouly used by the cached entry frame.
If you want the TrueSize
breakdown of the types of objects used, you can Clone
the entry and call TrueSize
on the copy. This works because the copy is not a fault block, and so it does not reference the soups/cursors/stores.