StringBuilder growing over 85k and moving to LOH?

2019-06-04 18:11发布

Possible Duplicate:
How does StringBuilder's capacity change?

Let's say a StringBuilder is allocated and then it grows to over 85k, will it get moved over to the Large Object Heap?

2条回答
狗以群分
2楼-- · 2019-06-04 18:47

The StringBuilder itself won't be allocated on the LOH, but its internal string buffer will be. The allocator doesn't know anything about what objects are allocating its data. It just knows that an allocation larger than some maximum size will go to the LOH.

查看更多
做个烂人
3楼-- · 2019-06-04 18:56

StringBuilder doesn't "grow".

In pre-4.0 SB, it simply allocated a new bigger buffer and copied the content from the old to the new. So in the end yes, the internal buffer was moved to LOH. The SB object not, because it's very small (to make it simple, it could have been simply a reference to the buffer and the length of the string in the buffer. It was a little more complex because it implemented copy-on-write after using the ToString method. So the ToString method made the buffer read-only and returned it as a string, and any other write to the SB duplicated the buffer).

In 4.0 SB uses something like a linked list of buffers (it's called a "rope"), and they are always small enough not to go to LOH.

查看更多
登录 后发表回答