[webkit-dev] Optimization of buffer allocation of Vector and StringBuilder

Xianzhu Wang (王显著) wangxianzhu at chromium.org
Mon Oct 10 04:46:18 PDT 2011


One aspect of the cost of WTF::Vector and WTF::StringBuilder is about buffer
expansion and shrinking. The affecting factors include the minimum capacity,
policy of expansion and shrinking, etc. I think the optimal configurations
of them are related to not only the application, but also the underlying
memory allocation library. For example, with tcmalloc, allocation of a
17-byte buffer will get a 32-byte buffer, so we can directly allocate a
32-byte buffer when the required size is 17; and we don't need to shrink a
32-byte buffer to 17. I think considering this we could reduce the
unnecessary allocations and copies. I'm doing some experiments, and the data
will be available soon.

malloc_good_size() can get the rounded-up size of a required size, but it
seems not available on all platforms. It's easy to implementation it over
tcmalloc. On platforms that malloc_good_size() is not available, it's
possible to get the mapping with a program and then hardcode the rules in
WebKit, but I'm afraid if the rules could match the actual running
environment. Any ideas?



The current characteristics of WTF::Vector and WTF::StringBuilder about
memory allocation are as below:

  - minimum capacity: 16 elements
  - inline buffer, copy on release
  - dynamic buffer: expand by (1/4 of the original size + 1) each time: 16,
21, 27, 34, 43, 54, .... these seem not good for allocators
  - shrinkToFit() will shrink to required size

  - minimum capacity: 16 UChars
  - expand to 2x size each time
  - shrinkToFit() will shrink if over-allocation > 1/4 of the required size
  - automic strinking in toString(), if over-allocation > 1/4 of the
required size
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.webkit.org/pipermail/webkit-dev/attachments/20111010/41bec070/attachment.html>

More information about the webkit-dev mailing list