2014-09-04 99 views
0

我有一个旧的应用程序使用CString整个代码。 写入CString的字符串的最大大小是8,9个字符,但我注意到它分配更多。 (每个CString至少128字节)我可以限制MFC CString缓冲区的大小吗

有没有办法限制CString缓冲区的大小。 Fox示例为64字节?

由于提前,

+0

这真的是一个问题吗? – 2014-09-11 17:37:23

+0

是的,如果你有1000万对象,每个对象有4个CString对象。 – branero79 2014-09-14 16:13:30

回答

1

详细地: CString的实现是内部的。您可以在CSimpleStringT :: PrepareWrite2和字符串管理器的重新分配函数中找到代码。

PrepareWrite2分配缓冲区。如果之前没有缓冲区,它会请求确切的大小。如果缓冲区发生变化。缓冲区是newLength * 1.5。

最后,请求被传递给字符串管理器的重新分配函数。最后,这个大小被传递给CRT函数realloc。

请记住,内存管理器本身再次决定什么块大小是“有效的”,并可能再次改变大小。所以我看到(在VS-2013/VS-2010中),你没有机会改变块大小。这项工作最终由realloc完成。甚至这个功能将其请求传递给HeapAlloc ...

+0

感谢您的回答。我将不得不重做代码并替换CStrings。我做了一个额外的测试,我看到,当我在CString分配的缓冲区中放置3个字符是64字节。 – branero79 2014-09-06 05:31:49

+1

调试还是发布?即使你更换它。最后,段由内部堆分配。该模块控制64字节。我认为这是最小的可分配块。少会导致更多的碎片!我的提示:不要为此担心。关于这点以及多年的经验有充分的理由。 – xMRi 2014-09-06 17:40:42